2016-06-06 5 views
1

Entschuldigen Sie, dass Sie das gefragt haben. Es scheint so einfach zu sein. Ich habe Daten in dieser Struktur:Rückgabewert für gegebenen Schlüssel in js und d3 - muss ich Schleife?

[ 
{key: "fred", value: {Object} }, 
{key: "sally", value: {Object} }, 
{key: "terry", value: {Object} } 
] 

Wie gebe ich Wert wo Schlüssel = "Sally"? Sicherlich gibt es einen anderen Weg als Looping (es ist ein langes Array)? Danke

+0

'Array.filter (function (item) {item.key Rückkehr === 'sally';}) ' – Rayon

+3

[' arr.find (o => o.key = 'sally') '] (https://jsfiddle.net/tusharj/hbz0Lk6q/) – Tushar

Antwort

2

Es gibt keinen anderen Weg als das Schleifen. Es kann verborgen sein, aber alle Methoden werden schließlich zum Schleifen führen. Wenn Sie den Suchvorgang mehrmals durchführen möchten, können Sie Ihre Daten indizieren. Es wird mehr Speicher benötigt, aber nur einmal durchlaufen.

In reiner JS (ES5):

var indexed = arr.reduce(function(r, e) { 
    r[e.key] = e.value; 
    return r; 
}, {}); 

console.log(indexed["sally"]); 
console.log(indexed["fred"]); 

Mit D3:

var indexed = d3.map(arr, function(d) { return d.key}); 

console.log(indexed.get("sally").value); 
console.log(indexed.get("fred").value);