2016-03-15 144 views
1

我正在处理角js,我对它很陌生。所以我被困在一个问题,我必须减去两个包含对象的数组。过滤包含基于另一个包含角js中的对象的数组的对象的数组

For Eg. 

var all = [{id:'1',name:'A'},{id:'2',name:'B'},{id:'3',name:'C'},{id:'4',name:'D'}]; 
var old = [{id:'1',name:'A',state:'healthy'},{id:'3',name:'C',state:'healthy'}]; 

var newArray = []; 

现在,我想与未在“老”列表中的现有如下

newArray = [{id:'2',name:'B'},{id:'4',name:'D'}] 

反正在角JS实现这一目标的对象来填充“newArray”变量?由于

回答

0

可以使用Array.prototype.forEach()Array.prototype.some()

var all = [{id:'1',name:'A'},{id:'2',name:'B'},{id:'3',name:'C'},{id:'4',name:'D'}]; 
 
var old = [{id:'1',name:'A',state:'healthy'},{id:'3',name:'C',state:'healthy'}]; 
 

 
var newArr = []; 
 

 
all.forEach(function(e) { 
 
    if(!old.some(s => s.id == e.id)) { 
 
     newArr.push(e); 
 
    } 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(newArr, 0, 2) + '</pre>');

1

试试这个

var all = [{ 
 
    id: '1', 
 
    name: 'A' 
 
}, { 
 
    id: '2', 
 
    name: 'B' 
 
}, { 
 
    id: '3', 
 
    name: 'C' 
 
}, { 
 
    id: '4', 
 
    name: 'D' 
 
}]; 
 
var old = [{ 
 
    id: '1', 
 
    name: 'A', 
 
    state: 'healthy' 
 
}, { 
 
    id: '3', 
 
    name: 'C', 
 
    state: 'healthy' 
 
}]; 
 

 
var newlist = all.filter(function(a) { 
 
    return old.filter(function(o) { 
 
    return o.id == a.id 
 
    }).length == 0 
 
}) 
 
document.write('<pre>' + JSON.stringify(newlist, 0, 4) + '</pre>')

0

与线性复杂度的提案。

var all = [{ id: '1', name: 'A' }, { id: '2', name: 'B' }, { id: '3', name: 'C' }, { id: '4', name: 'D' }], 
 
    old = [{ id: '1', name: 'A', state: 'healthy' }, { id: '3', name: 'C', state: 'healthy' }], 
 
    result = function (array1, array2) { 
 
     var o = {}; 
 
     array2.forEach(function (a) { 
 
      o[a.id] = true; 
 
     }); 
 
     return array1.filter(function (a) { 
 
      return !o[a.id]; 
 
     }); 
 
    }(all, old); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

0

这是不是在所有涉及到AngularJS。这是一个JavaScript的问题,你可以很容易地通过实现这一结果如下代码 -

var new = all.filter(function(element) { 
    var res = $.grep(old, function(el) { 
     return el.id == element.id; 
    }); 
    if(res.length == 0) return element; 
}); 
相关问题