使用数组中的键过滤对象

我有这个数组


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'];

做这个的最好方式是什么?


牛魔王的故事
浏览 137回答 3
3回答

神不在的星期二

如果您有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

如果中的所有值都array存在,obj则使用Array.map否则如果缺少条目,obj则可以使用Array.reduceconst 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);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript