[英]How to check if an id (inside a list of ids) exists in an array of objects with ids?
List1: 清单1:
[1,2,3,4]
List2: 清单2:
[{id:1,name:hi},{id:3,name:hi},{id:5,name:hi}]
How can I check which items from List1 is missing from List2? 如何检查List2中缺少List1中的哪些项目?
You can do something like this with help of map()
and filter()
您可以借助
map()
和filter()
做类似的事情
var list1 = [1, 2, 3, 4], list2 = [{ id: 1, name: 'hi' }, { id: 3, name: 'hi' }, { id: 5, name: 'hi' }]; // get array of id's var ids = list2.map(function(v) { return v.id; }) // get missing elements var miss = list1.filter(function(v) { // check element in id's array return ids.indexOf(v) == -1; }); document.write('<pre>' + JSON.stringify(miss, null, 3) + '</pre>');
Using ES6 arrow function 使用ES6箭头功能
var list1 = [1, 2, 3, 4], list2 = [{ id: 1, name: 'hi' }, { id: 3, name: 'hi' }, { id: 5, name: 'hi' }]; // get array of id's var ids = list2.map(v => v.id); // get missing elements var miss = list1.filter(v => ids.indexOf(v) == -1); document.write('<pre>' + JSON.stringify(miss, null, 3) + '</pre>');
Use Array.prototype.filter
使用
Array.prototype.filter
var list1 = [1,2,3,4]; var list2 = [{id:1,name:'hi'},{id:3,name:'hi'},{id:5,name:'hi'}]; var t = list2.map(e => e.id); // get all 'ids' from 'list2' var result = list1.filter(e => t.indexOf(e) == -1); document.write(JSON.stringify(result));
I would try to reduce list2 to array of missing ids. 我会尝试将list2减少为缺少ID的数组。 Maybe like this:
可能是这样的:
var data = [{id: 1, name: 'hi'}, {id: 3, name: 'hi'}, {id: 5, name: 'hi'}] var ids = [1, 2, 3, 4] var missing = data.reduce(function(prev, curr) { return prev.filter(function(id) { return id !== curr.id }) }, ids.slice()) document.write(missing)
A solution with linear complexity for sorted arrays. 具有线性复杂度的排序数组的解决方案。
var list1 = [1, 2, 4, 30], list2 = [{ id: 1, name: 'hi' }, { id: 3, name: 'hi' }, { id: 5, name: 'hi' }], missing = list1.filter(function (a) { while (list2[this.index] && list2[this.index].id < a) { this.index++; } return !list2[this.index] || list2[this.index].id !== a; }, { index: 0 }); document.write('<pre>' + JSON.stringify(missing, 0, 4) + '</pre>');
Combine Array methods filter
and some
: 结合Array方法
filter
和some
:
var list1 = [1,2,3,4];
var list2 = [{id:1,name:'hi'},{id:3,name:'hi'},{id:5,name:'hi'}];
return list2.filter(function(o) {
return !list1.some(function(id) { return o.id === id; })
})
which yields the objects from list2
whose ids are not in list1
. 它从
list2
其id不在list1
的对象。
The converse, as I saw many people post, is this: 正如我看到的很多人所说的那样,相反是:
return list1.filter(function(id) {
return !list2.some(function(o) { return o.id === id; });
});
which yields the ids from list1
that do not have corresponding objects in list2
从列表
list1
产生的id在list2
没有对应的对象
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.