[英]Filter object with keys in array
我有这个数组
const array = [1, 3, 6];
和这个对象
const obj = {
1: {id: 1, foo: 'a', ...},
2: {id: 2, foo: 'b', ...}
3: {id: 3, foo: 'c', ...},
4: {id: 4, foo: 'd', ...},
5: {...},
6: {...}
... // up to 1000 key/value paris
};
我想知道如何用array
的键过滤obj
。 一种方法是
obj.filter(elem => elem.id...);
但这会遍历obj
中的所有元素,尽管array
中只有三个元素。 更好的方法是遍历array
,但是
array.filter(elem => elem === obj.id ...);
然后仅返回array
的元素(即1, 3, 6
)。 我需要的是一个看起来像的数组
const result = ['s', 'b', 'c', 'd'];
做这个的最好方式是什么?
您可以映射数组并从对象内部返回键foo
const res = array.map(elem => obj[elem].foo);
如果对象中不存在所有元素,则可以添加过滤条件以删除未定义的值
const res = array.map(elem => obj[elem] &&obj[elem].foo).filter(Boolean);
如果您将id
作为键,则可以通过过滤键以仅获取已知键来映射所需的值,然后映射该值。
const array = [1, 3, 6], object = { 1: { id: 1, foo: 'bar' }, 2: {}, 3: { id: 3, foo: 'foo' }, 4: {}, 5: {} }, result = array .filter(Object.hasOwnProperty.bind(object)) .map(id => object[id].foo); console.log(result);
如果obj
中array
所有值都存在,则使用Array.map,否则,如果obj
中缺少条目,则可以使用Array.reduce
const array = [1, 3, 6]; const obj = {1: {id: 1, foo: 'bar'},2: {id: 2, foo: 'foo'}}; const result = array.reduce((a,c) => obj[c] ? a.concat(obj[c].foo) : a, []);; console.log(result);
您不需要迭代所有只需要检查键是否存在的对象,如果键存在,则将foo值推送到结果数组中,这是代码:
const array = [1, 3, 6];
const obj = {
1: {id: 1, foo: 'bar'},
2: {id: 2, foo: 'foo'},
3: {},
4: {},
5: {},
6: {}
};
let result = [];
array.forEach((el) => {
if(obj.hasOwnProperty(el)){
result.push(obj[el].foo)
}
});
console.log(result);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.