我有一个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 ]

是否有更优雅或更惯用的方法来实现这一点,从而不需要自定义实用程序函数?


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


当前回答

从对象数组中解构并获取特定属性:

const customerList = dealerUserData?.partyDetails.map(
  ({ partyId, custAccountId }) => ({
    partyId,
    custAccountId,
    customerId: dealerUserData?._id,
    userId: dealerUserData?.authUserID,
  }),
);

其他回答

在ES6中,您可以执行以下操作:

const objArray = [{foo: 1, bar: 2}, {foo: 3, bar: 4}, {foo: 5, bar: 6}]
objArray.map(({ foo }) => foo)

从对象数组收集不同字段的示例

let inputArray=[{id:1,名称:“name1”,值:“value1”},{id:2,名称:“name2”,值:“value2”},];let ids=inputArray.map((item)=>item.id);let names=inputArray.map((item)=>item.name);let values=inputArray.map((item)=>item.value);console.log(id);console.log(名称);console.log(值);

结果:

[ 1, 2 ]
[ 'name1', 'name2' ]
[ 'value1', 'value2' ]

上面提供的答案适合于提取单个属性,如果您想从对象数组中提取多个属性,该怎么办。这就是解决方案!!在这种情况下,我们可以简单地使用_.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}〕

享受

上述答案适用于单个属性,但当从数组中选择多个财产时,请使用以下选项

var arrayObj=[{Name,'A',Age:20,Email:'a.gmail.com'},{Name,'B',Age:30,Email:'b.gmail.com'},{Name,'C',Age:40,Email:'c.gmail.com'}]

现在我只选择两个字段

 var outPutArray=arrayObj.map(( {Name,Email} ) =>  ({Name,Email}) )
 console.log(outPutArray)

从对象数组中解构并获取特定属性:

const customerList = dealerUserData?.partyDetails.map(
  ({ partyId, custAccountId }) => ({
    partyId,
    custAccountId,
    customerId: dealerUserData?._id,
    userId: dealerUserData?.authUserID,
  }),
);