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

新手上路,请多包涵

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

有没有更优雅或更惯用的方法来做到这一点,这样就不需要自定义实用功能了?


注意 建议的 duplicate ,它涵盖了如何将单个 对象 转换为数组。

原文由 hyde 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

这是实现它的更短的方法:

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

或者

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

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

原文由 Jalasem 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

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

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

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

Array.prototype.map 文档

原文由 Niet the Dark Absol 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题