为了账号安全,请及时绑定邮箱和手机立即绑定

使用数组中的键过滤对象

使用数组中的键过滤对象

牛魔王的故事 2021-06-27 17:54:52
我有这个数组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);


查看完整回答
反对 回复 2021-07-01
?
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);


查看完整回答
反对 回复 2021-07-01
  • 3 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信