我有一个如下对象,
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']))
这可行,但它会进行两次迭代。有没有办法在一次迭代中实现相同的目标。提前谢谢。
答案 0 :(得分:5)
要使用_.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>
&#13;
答案 1 :(得分:3)
对于像从对象中选择一些属性这样简单的事情,为什么不使用普通的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);
&#13;
它不会比那更快。特别是对于像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);
&#13;