如何检查id(在id列表中)是否存在于具有id的对象数组中
How to check if an id (inside a list of ids) exists in an array of objects with ids?
List1:
[1,2,3,4]
清单2:
[{id:1,name:hi},{id:3,name:hi},{id:5,name:hi}]
如何检查清单2中缺少清单1中的哪些项?
您可以在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>');
使用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>');
使用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));
我会尝试将list2简化为缺少id的数组。可能是这样的:
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)
排序数组的线性复杂度解决方案。
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>');
组合数组方法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; })
})
其从CCD_ 6产生id不在CCD_ 7中的对象。
正如我看到许多人发帖的那样,相反的情况是:
return list1.filter(function(id) {
return !list2.some(function(o) { return o.id === id; });
});
它从CCD_ 8中产生在CCD_ 9 中没有相应对象的id
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 希望日期开始结束于while循环中的一个房间id的一个数组
- Instagram客户端ID是否特定于每个使用它的人
- 仅将 CSS 规则应用于
中的第一个 ,而不分配类/ID - RequireJS:将插件动态应用于模块id
- 如何检查id(在id列表中)是否存在于具有id的对象数组中
- 使用内部脚本更改表单元格 css,而不依赖于 id、类或包含
- Javascript:将类应用于多个 Id 用于交互式地图
- jQuery ID 选择器仅适用于第一个元素
- 将 jQuery 事件应用于两个 DOM ID 的选择器
- 将 javascript 函数应用于相同的 id
- 代码仅适用于找到的第一个元素,存在多个具有相同 id 的元素
- Event.observe 仅适用于文档,不适用于特定 ID
- 如何选择具有依赖于 javascript 变量的 id 的行
- 单击时获取按钮 ID 并将其应用于使用 javascript 的函数
- 无法让 .focus() 专注于 Chrome、Safari 和 FF 中带有 id 的输入
- 具有数组 ID 的组合框
- 如何将一个函数应用于网页上的多个 Id
- 通过ID获取要应用于所有元素的Javascript函数
- 使用jquery将css应用于所有id