[英]Filter array of objects by array of strings
我的 Object:
const searchFor = ['appInfo', 'questions'];
我的数据:
const data = [
{ id: '1', data: 'jobInfo' },
{ id: '2', data: 'appInfo' },
{ id: '3', data: 'documents' },
{ id: '4', data: 'questions' },
];
我期待最终的结果是:
[
{ id: '2', data: 'appInfo' },
{ id: '4', data: 'questions' },
];
我的尝试是我可以过滤一个具有固定值的项目
const result = Object.keys(searchFor).map((key) => data.filter((obj) => obj.data === key))
我得到array of arrays
但我需要array of object
我不确定是否有更好的方法来做到这一点。
提前致谢:)
您可以将Array.prototype.filter()
与Array.prototype.includes()
) 一起使用:
const searchFor = ['appInfo', 'questions'], data = [{id:'1',data:'jobInfo'},{id:'2',data:'appInfo'},{id:'3',data:'documents'},{id:'4',data:'questions'},], result = data.filter(({data:d}) => searchFor.includes(d)) console.log(result)
.as-console-wrapper{min-height:100%;}
您可以将Map
用于密钥/对象对,将 map 用于找到的对象。
const searchFor = ['appInfo', 'questions'], data = [{ id: '1', data: 'jobInfo' }, { id: '2', data: 'appInfo' }, { id: '3', data: 'documents' }, { id: '4', data: 'questions' }], result = searchFor.map( Map.prototype.get, new Map(data.map(o => [o.data, o])) ); console.log(result);
您可以使用数组方法.filter
和.includes
(因为searchFor
是一个数组。)
const searchFor = ['appInfo', 'questions']; const data = [ { id: '1', data: 'jobInfo' }, { id: '2', data: 'appInfo' }, { id: '3', data: 'documents' }, { id: '4', data: 'questions' }, ]; const result = data.filter(item => searchFor.includes(item.data)); console.log(result);
你可以这样做:
const searchFor = ['appInfo', 'questions']; const data = [ { id: '1', data: 'jobInfo' }, { id: '2', data: 'appInfo' }, { id: '3', data: 'documents' }, { id: '4', data: 'questions' }, ]; var res = data.filter(i=> searchFor.includes(i.data)) console.log(res)
const searchFor = ['appInfo', 'questions']; const data = [ { id: '1', data: 'jobInfo' }, { id: '2', data: 'appInfo' }, { id: '3', data: 'documents' }, { id: '4', data: 'questions' }, ]; var hashTable = {}; searchFor.forEach(i=> hashTable[i] = true ); var res = data.filter(i=>{ return hashTable[i.data] }); console.log(res)
您可以使用:
const results = data.filter(item => searchFor.includes(item.data)):
console.log(results):
const result = data.filter((rec, id) => {
if (searchFor.indexOf(rec.data) > -1) {
return rec
}
})
console.log(data.filter(element=>{
return searchFor.includes(element.data)
}));
这里的想法是您必须获取数据元素,然后必须在与搜索 object 匹配后过滤每个数据元素。因为搜索包含您的过滤条件的 object,因此它必须嵌套在外部迭代中,即我们的过滤方法已传递数据 object。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.