2011-11-26 121 views
7

我覺得很基本的問題,但我無法找到關於該對象的信息。訪問對象數組的屬性

通過D3我解析CSV和每個對象看起來像這樣

name: "whatever" 
number: "52" 

我如何可以訪問的所有屬性「數字」數組作爲數組,而無需創建一個新的數組,推動每一個元素?

+1

你的意思是每個對象都是這樣的:'{「name」:「whatever」,「number」:52}'你有這些對象的數組嗎? –

+0

您可以直接訪問號碼字段。只是使用[我] [「數字」]或某物[我]。數字...甚至可以循環播放。是否有任何其他具體原因讓你把它作爲一個單獨的數組,而不是通過前面提到的方式直接訪問它? –

回答

27

使用:

var numbers = objects.map(function(o) { return o.number; }); 
+2

很乾淨。我比較接受的答案更喜歡這個。 – ericmjl

+0

真棒使用Array.map():) –

+0

親切。謝謝! – artdias90

2

在JavaScript中,你不能,因爲沒有這樣的數組。如果你有一系列物體,那麼每個物體都是它自己珍貴的小雪花。你當然可以將「數字」值傳遞給一個新的數組,但肯定是一個新的數組。

一些工具包(原型,也許功能和下劃線)有一個「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"); 
+0

也許值得加強'pluck'來接受在循環中調用的回調並接收每個對象的給定屬性的值。該數組仍然可以用於返回從回調中返回的值數組。 – RightSaidFred

+0

有趣的是,@RightSaidFred,我只是在想:-)然後我意識到這個函數實際上就是你通常所說的「map()」,你當然可以用「map()」實現「pluck()」 ()」。 – Pointy

+0

非常真實。這只是一個不太靈活的地圖!咄! – RightSaidFred

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

如果您正在使用lodash,你可以這樣做:

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