[英]How to get the difference of arrays in UnderscoreJS or angularJS
I have two array of objects: 我有两个对象数组:
1) [{id:1}{id:2}{id:3}{id:4}{id:5}]
2) [{id:1}{id:2}{id:3}]
is there any in build function in UnderscoreJS or AngularJS which will give me the output as : UnderscoreJS或AngularJS中的构建函数中是否有任何函数,它们会将输出显示为:
[{id:4}{id:5}]
I tried using the _.difference
and _.without
but this is not working as they work on simple arrays not on array of objects 我尝试使用_.difference
和_.without
但是这不起作用,因为它们适用于简单数组而不适用于对象数组
Thanks in advance. 提前致谢。
function diff(a, b) {
return _.filter(a, function(val) {
return !_.findWhere(b, val);
});
}
diff[{id:1}, {id:2}, {id:3}, {id:4}, {id:5}], [{id:1}, {id:2}, {id:3}]); // [{id:4}, {id:5}]
this solution is specific to this data structure and will not work for any array of objects. 此解决方案特定于此数据结构,不适用于任何对象数组。
I have a stupid way, but it seems to explain the problem. 我有一个愚蠢的方法,但这似乎可以解释问题。
//arr1.length >= arr2.length
function diff(arr1,arr2){
var array1 = new Array();
var array2 = new Array();
array1 = array1.concat(arr1);
array2 = array2.concat(arr2);
for (var i = array1.length - 1; i >= 0; i--) {
//instead "id" or other
var idVal = array1[i].id;
for (var j = array2.length - 1; j >= 0; j--) {
if(idVal == array2[j].id) {
//delete the object in array1 and array2
array1.del(i);
array2.del(j);
};
};
};
return array1.concat(array2);
}
Array.prototype.del = function ( dx ) {
if (isNaN(dx) || dx > this.length) {
return false;
}
for (var i = 0, n = 0; i < this.length; i++) {
if (this[i] != this[dx]) {
this[n++] = this[i]
}
}
this.length -= 1
}
Array.prototype.unique = function () {
var r = new Array();
label:for(var i = 0, n = this.length; i < n; i++) {
for(var x = 0, y = r.length; x < y; x++) {
if(r[x].id == this[i].id) {
continue label;
}
}
r[r.length] = this[i];
}
return r;
}
var array1 = [{id:"1"},{id:"2"},{id:"3"},{id:"4"},{id:"12"},{id:"15"},{id:"15"}].unique();
var array2 = [{id:"1"},{id:"2"},{id:"03"},{id:"4"},{id:"5"},{id:"5"},{id:"5"},{id:"5"},{id:"5"}].unique();
var resultArray = array1.length >= array2.length
? diff(array1,array2) : diff(array2,array1);
console.log(resultArray);
//[ { id: '3' },{ id: '12' },{ id: '15' },{ id: '03' },{ id: '5' } ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.