如何使用 .filter()
从另一个数组列表中的数组列表中减去/删除/移除所有重合元素ES6 javascript
?
Jquery 的解决方案也被接受,但任何解决方案必须与 IE11+ 和 Chrome iO 兼容。避免使用外部库(jquery 除外)。这是我到目前为止尝试过的:
var originList = [
{"id":1,"name":"www"},
{"id":2, "name":"fff"},
{"id":3, "name":"ddd"},
{"id":4, "name":"aaaa"},
{"id":5, "name":"zzzz"},
{"id":6, "name":"Susane"},
{"id":7,"name":"yyy"}
];
var rest = [
{"id":1,"name":"www"},
{"id":2, "name":"fff"},
{"id":3, "name":"ddd"},
{"id":4, "name":"aaaa"},
{"id":5, "name":"zzzz"},
];
var newList = [];
var list = [];
$.each(originList, function(id,data){
list = originList.filter(function(obj,a){
return data.id !== obj.id ? obj : false;
});
});
$.each(originList, function(id,data){
$.each(rest, function(alli,allData){
if(data.id === allData.id) {
newList[id] = data;
}
});
});
console.log(list); //does not exclude id:6
console.log(newList); //this result is what I want
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
最佳答案
您可以使用过滤
和查找
来更新版本。
var originList = [
{"id":1,"name":"www"},
{"id":2, "name":"fff"},
{"id":3, "name":"ddd"},
{"id":4, "name":"aaaa"},
{"id":5, "name":"zzzz"},
{"id":6, "name":"Susane"},
{"id":7,"name":"yyy"}
];
var rest = [
{"id":1,"name":"www"},
{"id":2, "name":"fff"},
{"id":3, "name":"ddd"},
{"id":4, "name":"aaaa"},
{"id":5, "name":"zzzz"},
];
var newList = originList.filter( o => rest.find( x => o.id === x.id ) );
console.log( newList );
对于旧版本,可以使用for
和if
。
var originList = [
{"id":1,"name":"www"},
{"id":2, "name":"fff"},
{"id":3, "name":"ddd"},
{"id":4, "name":"aaaa"},
{"id":5, "name":"zzzz"},
{"id":6, "name":"Susane"},
{"id":7,"name":"yyy"}
];
var rest = [
{"id":1,"name":"www"},
{"id":2, "name":"fff"},
{"id":3, "name":"ddd"},
{"id":4, "name":"aaaa"},
{"id":5, "name":"zzzz"},
];
var newList = [];
for (var i = 0; i < originList.length; i++) {
for (var x = 0; x < rest.length; x++) {
if ( rest[x].id === originList[i].id ) {
newList.push( originList[i] );
break;
}
}
}
console.log( newList );
关于Javascript - 从另一个数组列表中减去数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49073623/