我有一个JavaScript对象数组,其结构如下:
objArray = [ { foo: 1, bar: 2}, { foo: 3, bar: 4}, { foo: 5, bar: 6} ];
我想从每个对象中提取一个字段,并获得一个包含值的数组,例如,字段foo将给出数组[1,3,5]。
我可以用这种简单的方法做到这一点:
function getFields(input, field) {
var output = [];
for (var i=0; i < input.length ; ++i)
output.push(input[i][field]);
return output;
}
var result = getFields(objArray, "foo"); // returns [ 1, 3, 5 ]
是否有更优雅或更惯用的方法来实现这一点,从而不需要自定义实用程序函数?
注意建议的重复,它介绍了如何将单个对象转换为数组。
如果您希望ES6+中有多个值,以下操作将起作用
objArray = [ { foo: 1, bar: 2, baz: 9}, { foo: 3, bar: 4, baz: 10}, { foo: 5, bar: 6, baz: 20} ];
let result = objArray.map(({ foo, baz }) => ({ foo, baz }))
这是因为左边的{foo,baz}使用对象析构函数,而右边的箭头由于ES6的增强的对象文本而相当于{foo:foo,baz:baz}。
上面提供的答案适合于提取单个属性,如果您想从对象数组中提取多个属性,该怎么办。这就是解决方案!!在这种情况下,我们可以简单地使用_.pick(object,[paths])
_.pick(object, [paths])
假设objArray具有如下三个财产的对象
objArray = [ { foo: 1, bar: 2, car:10}, { foo: 3, bar: 4, car:10}, { foo: 5, bar: 6, car:10} ];
现在我们要从每个对象中提取foo和bar属性,并将它们存储在一个单独的数组中。首先,我们将使用map迭代数组元素,然后对其应用Lodash Library Standard_.pick()方法。
现在我们可以提取“foo”和“bar”属性。
var newArray=objArray.map((element)=>{return _.pick(element,['fo','bar'])})console.log(newArray);
结果是〔{foo:1,bar:2},{foo:3,bar:4},{foo:5,bar:6}〕
享受