2011-11-26 53 views
7

câu hỏi khá cơ bản mà tôi nghĩ, nhưng tôi không thể tìm thấy thông tin về điều đó.Truy cập các thuộc tính của một mảng đối tượng

Qua d3 tôi phân tích một csv và từng đối tượng nhìn như thế này

name: "whatever" 
number: "52" 

Làm thế nào tôi có thể truy cập vào các mảng của tất cả các thuộc tính "số" như một mảng mà không cần tạo một mảng mới và đẩy mỗi phần tử?

+1

Bạn có nghĩa là mỗi đối tượng trông giống như: '{" name ":" bất cứ điều gì "," số ": 52}' và bạn có một mảng các đối tượng này? –

+0

bạn sẽ trực tiếp có quyền truy cập vào trường số. chỉ cần sử dụng một cái gì đó [i] ["số"] hoặc một cái gì đó [i] .number ... thậm chí lặp qua là có thể. Có lý do cụ thể nào khác cho bạn để có nó như là một mảng riêng biệt hơn là truy cập trực tiếp thông qua một cách được đề cập trước đó ... ?? –

Trả lời

27

Sử dụng :

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

Rất sạch sẽ. Tôi thích cái này hơn câu trả lời được chấp nhận. – ericmjl

+0

Sử dụng tuyệt vời của Array.map() :) –

+0

genial. cảm ơn! – artdias90

2

Trong JavaScript, bạn không thể, vì không có mảng như vậy. Nếu bạn đã có một mảng các đối tượng, tốt, mỗi đối tượng là bông tuyết nhỏ quý giá của riêng nó. Tất nhiên bạn có thể chuyển các giá trị "số" sang một mảng mới, nhưng chắc chắn nó sẽ là một mảng mới.

Một số bộ công cụ (Nguyên mẫu và có thể Chức năng và Gạch dưới) có cơ sở "pluck()" được thiết kế để thực hiện chính xác những gì bạn muốn, nhưng chúng cũng buộc phải tạo mảng mới.

function pluck(array, property) { 
    var i, rv = []; 

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

    return rv; 
} 

Sau đó:

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

Có lẽ giá trị tăng cường 'pluck' để chấp nhận một cuộc gọi lại được gọi trong vòng lặp và nhận giá trị của thuộc tính đã cho của mỗi đối tượng. Mảng vẫn có thể được sử dụng để trả về một mảng các giá trị được trả về từ cuộc gọi lại. – RightSaidFred

+0

Hài hước, @RightSaidFred, tôi chỉ nghĩ rằng :-) Sau đó, tôi nhận ra rằng chức năng đó thực sự sẽ là những gì bạn thường gọi là "map()", và bạn chắc chắn có thể thực hiện "pluck()" về "map() ". – Pointy

+0

Rất đúng. Nó chỉ là một bản đồ ít linh hoạt hơn! Duh !! – RightSaidFred

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

Nếu bạn đang sử dụng lodash, bạn có thể làm điều này:

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

Các vấn đề liên quan