我有这个数组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};我想知道如何obj使用array. 一种方法是obj.filter(elem => elem.id...);但这会遍历 中的所有元素obj,即使array. 更好的是迭代array,但是array.filter(elem => elem === obj.id ...);然后只返回array(意思是,1, 3, 6)中的元素。我需要的是一个看起来像的数组const result = ['s', 'b', 'c', 'd'];做这个的最好方式是什么?
3 回答
神不在的星期二
TA贡献1963条经验 获得超6个赞
如果您有idas 键,则可以通过过滤键以仅获取已知键然后映射值来映射所需的值。
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);
qq_笑_17
TA贡献1818条经验 获得超7个赞
如果中的所有值都array存在,obj则使用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);
添加回答
举报
0/150
提交
取消