从对象数组中,将属性的值提取为数组

2022-08-29 21:59:54

我有具有以下结构的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 ]

有没有一种更优雅或惯用的方法可以做到这一点,这样就不需要自定义实用程序函数了?


请注意建议的重复项,它介绍了如何将单个对象转换为数组。


答案 1

以下是实现它的较短方法:

let result = objArray.map(a => a.foo);

let result = objArray.map(({ foo }) => foo)

您还可以检查Array.prototype.map()


答案 2

是的,但它依赖于JavaScript的ES5功能。这意味着它不适用于IE8或更早版本。

var result = objArray.map(function(a) {return a.foo;});

在ES6兼容的JS解释器上,为了简洁起见,您可以使用箭头函数

var result = objArray.map(a => a.foo);

Array.prototype.map documentation