如何检查id(在id列表中)是否存在于具有id的对象数组中

How to check if an id (inside a list of ids) exists in an array of objects with ids?

本文关键字:id 于具 数组 对象 存在 列表 何检查 检查 是否      更新时间:2023-09-26

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>');

组合数组方法filtersome:

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