2011-11-26 25 views
7

かなり基本的な質問私は思うが、私はその情報を見つけることができませんでした。 D3を通じてオブジェクトの配列のプロパティへのアクセス

私はcsvファイルを解析し、各オブジェクトは、私は新しい配列を作成し、各要素を押さずに配列としてすべてのプロパティ「数」の配列にアクセスすることができますどのようにこの

name: "whatever" 
number: "52" 

のように見えますか?

+1

それぞれのオブジェクトが '{" name ":" whatever "、" number ":52}'のようになり、これらのオブジェクトの配列を持っていることを意味しますか? –

+0

番号フィールドに直接アクセスできます。何か[i] ["number"]か何か[i]。number ...を使用するだけでもループスルーが可能です。前に述べた方法で直接アクセスするのではなく、別の配列として持っている他の具体的な理由はありますか? –

答えて

27

使用:

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

非常にきれいです。私は受け入れられた答えよりもこの方が好きです。 – ericmjl

+0

Array.map(): –

+0

genialの使い方を教えてください。ありがとう! – artdias90

2

JavaScriptでは、このような配列が存在しないため、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"); 
+0

ループ内で呼び出され、各オブジェクトの指定されたプロパティの値を受け取るコールバックを受け入れるには、 'pluck'を強化する価値があります。配列は、コールバックから返された値の配列を返すために使用できます。 – RightSaidFred

+0

面白い、@ RightSaidFred、私はちょうどそれを考えていた:-)その後、その機能はあなたが通常map()と呼んでいることに気付きました。そして、あなたは確かに "map" ()」と表示されます。 – Pointy

+0

非常に真実。それはあまり柔軟性の低いマップです! Duh !! – RightSaidFred

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

あなたがlodash使用している場合は、この操作を行うことができます。

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

関連する問題