![](/img/trans.png)
[英]check whether an array contains a regex that matches with a string, using reduce
[英]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])
您可以简单地将filter
与includes
结合使用来生成一个新数组,该数组仅包含具有包含在ids
的id
的项目:
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.