Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何获得下划线JS或angularJS中数组的差异_Javascript_Angularjs_Underscore.js_Difference - Fatal编程技术网

Javascript 如何获得下划线JS或angularJS中数组的差异

Javascript 如何获得下划线JS或angularJS中数组的差异,javascript,angularjs,underscore.js,difference,Javascript,Angularjs,Underscore.js,Difference,我有两个对象数组: 1) [{id:1}{id:2}{id:3}{id:4}{id:5}] 2) [{id:1}{id:2}{id:3}] 在下划线JS或AngularJS中是否有任何内置函数将输出为: [{id:4}{id:5}] 我尝试使用\u0.difference和\u0.without,但这不起作用,因为它们在简单数组上工作,而不是在对象数组上工作 提前谢谢 function diff(a, b) { return _.filter(a, function(val) {

我有两个对象数组:

1) [{id:1}{id:2}{id:3}{id:4}{id:5}]

2) [{id:1}{id:2}{id:3}]
在下划线JS或AngularJS中是否有任何内置函数将输出为:

[{id:4}{id:5}]
我尝试使用
\u0.difference
\u0.without
,但这不起作用,因为它们在简单数组上工作,而不是在对象数组上工作

提前谢谢

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}]

此解决方案特定于此数据结构,不适用于任何对象数组。

我有一个愚蠢的方法,但它似乎可以解释问题

//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' } ]
//arr1.length>=arr2.length
功能差异(arr1、arr2){
var array1=新数组();
var array2=新数组();
阵列1=阵列1.concat(arr1);
array2=array2.concat(arr2);
对于(变量i=array1.length-1;i>=0;i--){
//而不是“id”或其他
var idVal=array1[i].id;
对于(var j=array2.length-1;j>=0;j--){
if(idVal==array2[j].id){
//删除array1和array2中的对象
第(i)款;
array2.del(j);
};
};
};
返回array1.concat(array2);
}
Array.prototype.del=函数(dx){
如果(isNaN(dx)| dx>此.length){
返回false;
}
for(变量i=0,n=0;i=array2.length
? diff(array1,array2):diff(array2,array1);
console.log(resultArray);
//[{id:'3'},{id:'12'},{id:'15'},{id:'03'},{id:'5'}]

可能的重复是棘手的,因为即使它们共享相同的值,这也不是同一个对象。@humble.rumble、Tushar和Sunil D的可能重复。这不是重复,因为这不是简单的数组,这是一个对象数组,Uzi Kilon是的,这是棘手的,@humble.rumble是我的错误,(JavaScript3答案中两个对象数组之间的差异)对我很有用。谢谢大家。