繁体   English   中英

检查一个数组是否包含一个 id 与 id 列表匹配的对象

[英]Check, whether an array contains an object with id that matches list of ids

有没有一种优雅的方法来确定一个数组是否是这样的:

[
  {id: 1, value: false},
  {id: 2, value: true},
  {id: 3, value: false},
  {id: 4, value: true},
  {id: 5, value: true}
]

包含一个 id 列在另一个数组中的项目,如下所示:

[1,5]

在这种情况下,应该只返回这些值:

  {id: 1, value: false},
  {id: 5, value: true}

我试图使用includes() ,但它不起作用:

let array = [
  {id: 1, value: false},
  {id: 2, value: true},
  {id: 3, value: false},
  {id: 4, value: true},
  {id: 5, value: true}
];

array.includes([1,5])

您可以简单地将filterincludes结合使用来生成一个新数组,该数组仅包含具有包含在idsid的项目:

 const array = [ {id: 1, value: false}, {id: 2, value: true}, {id: 3, value: false}, {id: 4, value: true}, {id: 5, value: true} ]; const ids = [1, 5]; const filteredArray = array.filter((item) => ids.includes(item.id)); console.log(filteredArray);

你可以这样做

const data = [
  {id: 1, value: false},
  {id: 2, value: true},
  {id: 3, value: false},
  {id: 4, value: true},
  {id: 5, value: true}
];

const searchTerm = [1,5];

const result = data.filter((dataObject) => {

    // dataObject will be each item in the data array;
    return searchTerm.includes(dataObject.id)}
})

我建议你使用Set 由于您正在搜索特定键的数据,因此在大型搜索数组上会有更好的性能

 const data = [ {id: 1, value: false}, {id: 2, value: true}, {id: 3, value: false}, {id: 4, value: true}, {id: 5, value: true} ] const search = (data, terms) => { terms = new Set(terms) return data.filter(({ id }) => terms.has(id)) } console.log(search(data, [1, 5]))

关于表演的另一个注意事项。 如果您的代码多次使用不同的术语调用search ,您可以考虑在Map (或对象)中索引您的数组:

 const data = [ {id: 1, value: false}, {id: 2, value: true}, {id: 3, value: false}, {id: 4, value: true}, {id: 5, value: true} ] const indexedData = new Map(data.map((el) => [el.id, el])) const search = (...terms) => { return terms.map((id) => indexedData.get(id)).filter(e => e) } console.log(search(1, 5, 10))

最新的脚本只会在您的整个数据中迭代一次,然后复杂度将为o(n)n是您的搜索词。

编辑:这是您可以使用的所有解决方案的基准

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM