前端开发 HTML5 CSS3 HTML CSS JavaScript jQuery Bootstrap

jquery实现数组去重、判断数组以及对象中的内容是否相同

JavaScript HTML我帮您 1年前  0次浏览
本帖最后由 html580 于 2013-12-4 13:03 编辑 数组去重,判断数组、对象中的内容是否相同等等,在接下来的文章中使用js来简单实现下,感兴趣的朋友不要错过.
/*
*数组元素去重
*/
if (typeof Array.prototype.distinct != "function") {
Array.prototype.distinct = function () {
this.sort();
for (var i = 0; i < this.length - 1; i++) {
if ($.isPlainObject(this) && $.isPlainObject(this)) {
if (o2o(this, this)) {
this.splice(i, 1);
}
} else if ($.isArray(this) && $.isArray(this)) {
if (a2a(this, this)) {
this.splice(i, 1);
}
} else if (this === this) {
this.splice(i, 1);
}
}
}
}
/*
*比较对象是否相同
*/
function o2o(o1, o2) {
if (!($.isPlainObject(o1) && $.isPlainObject(o2))) {
return false;
}

var k1k2 = <>,
k1 = <>,
k2 = <>;
$.each(o1, function (k, v) {
k1.push(k);
});

$.each(o2, function (k, v) {
k2.push(k);
});
if (k1.length != k2.length) {
return false;
}
k1k2 = k1;
k1k2 = k1k2.concat(k2);
k1k2.distinct();
if (k1.length != k1k2.length || k2.length != k1k2.length) {
return false;
}

var flag = true;
$.each(k1k2, function (i, v) {
var v1 = o1;
var v2 = o2;
if (typeof v1 != typeof v2) {
flag = false;
} else {
if ($.isPlainObject(v1) && $.isPlainObject(v2)) { //recursion
flag = o2o(v1, v2);
if (!flag) {
return false;
}
} else if ($.isArray(v1) && $.isArray(v2)) {
flag = a2a(v1, v2);
if (!flag) {
return false;
}
} else {
if (v1 !== v2) {
flag = false;
}
}
}
});
return flag;
}
/*
*比较数组是否完全相同
*/
function a2a(a1, a2) {
if (!($.isArray(a1) && $.isArray(a2))) {
return false;
}
if (a1.length != a2.length) {
return false;
}

a1.sort();
a2.sort();
for (var i = 0; i < a1.length; i++) {
if (typeof a1 != typeof a2) {
return false;
}
if ($.isPlainObject(a1) && $.isPlainObject(a2)) {
var retVal = o2o(a1, a2);
if (!retVal) {
return false;
}
} else if ($.isArray(a1) && $.isArray(a2)) { //recursion
if (!a2a(a1, a2)) {
return false;
}
} else if (a1 !== a2) {
return false;
}
}
return true;
}



发表评论