14

我认为这是一个非常基本的问题,但我找不到相关信息。

通过d3,我解析了一个csv,每个对象如下所示

name:“随便”编号:“52”

如何在不创建新数组并推送每个元素的情况下,以数组的形式访问所有属性“number”的数组?

2
  • 1
    你是说每个物体看起来像:{“name”:“whatever”,“number”:52}你有这些对象的数组吗? 评论 2011年11月26日21:41
  • 您可以直接访问数字字段。只需使用[i][“number”]或[i].number。。。甚至循环也是可能的。有没有其他具体的原因让您将它作为一个单独的数组,而不是通过前面提到的方式直接访问它。。。?? 评论 2011年11月26日21:42

5个答案5

重置为默认值
31

使用阵列.map:

var numbers=objects.map(函数(o){return o.number;});
0
4

ES6版本:

常量数=objects.map(o=>o.number);

尽情享受吧。

0
2

在JavaScript中,您不能这样做,因为没有这样的数组。如果你有一组对象,那么每个对象都是它自己宝贵的小雪花。当然,您可以将“数字”值转移到一个新数组,但它肯定是一个新的数组。

一些工具包(Prototype,可能还有Functional和Undercore)有一个“pull()”工具,它的设计完全可以满足您的需要,但它们也被迫创建新的数组。

函数pull(数组,属性){变量i,rv=[];对于(i=0;i<数组长度;++i){rv[i]=数组[i][属性];}返回rv;}

然后:

var arrayOfNumbers=pull(originalArray,“number”);
  • 也许值得加强摘下接受在循环中调用的回调,并接收每个对象的给定属性的值。该数组仍然可以用于返回回调返回的值数组。 评论 2011年11月26日21:53
  • 有趣的是,@RightSaidFred,我只是在想:-)然后我意识到这个函数实际上就是你通常所说的“map()”,你当然可以用“map”来实现“pull()”。
    – 波蒂
    评论 2011年11月26日21:56
  • 非常正确。这只是一张不那么灵活的地图!呸!! 评论 2011年11月26日21:58
1
对于(i=0;i<myArrayOfObjects.length;i++){doWhatever(myArrayOfObjects[i].number);}
0

如果您正在使用lodash,您可以这样做:

var numbers=_.map(originalArray,'number')

不是你想要的答案吗?浏览已标记的其他问题问你自己的问题.