给定键列表,如何将对象的值作为数组获取?

how to get values of objects as array, given keys list?

我有一个对象如下,

obj = {
  '1': {val: 1},
  '2': {val: 2},
  '3': {val: 3},
  '4': {val: 4},
  ...
}

给定键列表(作为 Array),我想获取所有值列表(作为 Array)。

例如,

如果键列表是 ['3', '4'],输出将是 [{val: 3}, {val: 4}]

我试过如下

_.values(_.pick(obj, ['3', '4']))

这可行,但它会进行两次迭代。有没有办法在一次迭代中实现相同的目标。提前致谢。

要从所选对象 propsin Lodash 中创建值数组,请使用 _.at():

var obj = {
  '1': {val: 1},
  '2': {val: 2},
  '3': {val: 3},
  '4': {val: 4}
};

var result = _.at(obj, ['3', '4']);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

对于像从一个对象中选取几个属性这样简单的事情,为什么不直接使用纯 JS?

const obj = {
  '1': { val: 1 },
  '2': { val: 2 },
  '3': { val: 3 },
  '4': { val: 4 }
}
const keys = ['1', '3'];
const result = [];

for (let i = 0; i < keys.length; i++) {
  obj[keys[i]] && result.push(obj[keys[i]]);
}

console.log(result);

没有比这更快的了。尤其是对于像 lodash 这样的库,它需要多次迭代来涵盖各种你永远不必费心的极端情况。

或者,通过将对象访问存储在临时变量中甚至更快,这要归功于 @KoushikChatterjee:

const obj = {
  '1': { val: 1 },
  '2': { val: 2 },
  '3': { val: 3 },
  '4': { val: 4 }
}
const keys = ['1', '3'];
const result = [];
let temp;

for (let i = 0; i < keys.length; i++) {
    (temp = obj[keys[i]]) && result.push(temp);
}

console.log(result);