访问对象数组的属性

14

这是一个相当基础的问题,但我找不到相关的信息。

通过d3,我解析了一个CSV文件,每个对象看起来像这样:

name: "whatever"
number: "52"

我该如何以数组的形式访问所有属性为“number”的数组,而无需创建新数组并将每个元素推入其中?


1
你的意思是每个对象看起来像这样:{"name":"whatever","number":52},而你有一个包含这些对象的数组? - Jonathan M
你可以直接访问数字字段。只需使用 something[i]["number"] 或 something[i].number ... 即使循环也是可能的。除了通过前面提到的方式直接访问它,还有其他特定原因让你将其作为一个单独的数组吗? - Boopathi Rajaa
5个回答

31
请使用 数组.map 方法:
var numbers = objects.map(function(o) { return o.number; });

4

ES6版本:

const numbers = objects.map( o => o.number );

祝您愉快。


2
在JavaScript中,你不能这样做,因为没有这样的数组。如果你有一个对象数组,那么每个对象都是独立的。当然,你可以把“数字”值转移到一个新数组中,但它肯定是一个新数组。
一些工具包(如Prototype和可能Functional和Underscore)有一个“pluck()”功能,旨在实现你想要的功能,但它们也不得不创建新数组。
function pluck(array, property) {
  var i, rv = [];

  for (i = 0; i < array.length; ++i) {
    rv[i] = array[i][property];
  }

  return rv;
}

然后:

var arrayOfNumbers = pluck(originalArray, "number");

或许值得增强 pluck 方法,使其接受一个回调函数,在循环中被调用并接收每个对象给定属性的值。数组仍然可以用于返回从回调函数返回的值的数组。 - RightSaidFred
有趣的是,@RightSaidFred,我也在想那个 :-) 然后我意识到,那个函数实际上就是你通常所说的“map()”,而你肯定可以用“map()”来实现“pluck()”。 - Pointy
非常正确。它只是一张不太灵活的地图!傻瓜!! - RightSaidFred

1
for (i=0; i<myArrayOfObjects.length; i++) {
    doWhatever(myArrayOfObjects[i].number);
}

0
如果您正在使用lodash,您可以这样做:
``` var numbers = _.map(originalArray, 'number') ```

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接