2016-09-06 2 views
3

Ich habe eine Variable, die diese Daten enthalten:Javascript Wie in Array von Feld suchen

{"main":[ 
    {"id":"123","name":"name 1"}, 
    {"id":"234","name":"name 2"} 

    ] 
} 

Ich weiß, dass die ID der Daten, die ich gesucht werden soll.

Meine Frage ist ... Wie suche ich nach dem Namen von ID 234 (zum Beispiel) ist thw Daten oben?

+0

Verwenden JSON.parse(). – Amy

+0

iterieren Sie darin mit für und vergleichen Sie jeden Datensatz. – Doruk

Antwort

4

Verwenden Array#filter

Die filter() Verfahren mit allen Elementen ein neues Array erzeugt, das den Test durch die vorgesehene Funktion implementiert passieren.

var object = { 
 
    "main": [{ 
 
    "id": "123", 
 
    "name": "name 1" 
 
    }, { 
 
    "id": "234", 
 
    "name": "name 2" 
 
    }] 
 
}; 
 
var toFind = "234"; 
 
var filtered = object.main.filter(function(el) { 
 
    return el.id === toFind; 
 
}); 
 
console.log(filtered);

Wenn nur ein Objekt in der array ist, for-loop mit break bevorzugt werden könnte.

var object = { 
 
    "main": [{ 
 
    "id": "123", 
 
    "name": "name 1" 
 
    }, { 
 
    "id": "234", 
 
    "name": "name 2" 
 
    }] 
 
}; 
 
var toFind = "234"; 
 
for (var i = 0, len = object.main.length; i < len; i++) { 
 
    if (object.main[i].id === toFind) { 
 
    break; 
 
    } 
 
} 
 
console.log(object.main[i].name);

+0

Warum Filter verwenden? es wird über alle Array iterieren – pwolaq

+0

@pwolaq - OP kann mehr als ein Objekt mit ähnlicher ID haben ... – Rayon

+0

OP sagte, dass er einen Namen bekommen will, nicht Array von Objekten mit Namen – pwolaq

0

Sie können find() verwenden, wenn IDs eindeutig sind.

var data = {"main":[ 
 
    {"id":"123","name":"name 1"}, 
 
    {"id":"234","name":"name 2"} 
 
    ] 
 
} 
 

 
var name = data.main.find(function(o) { 
 
    return o.id == '234'; 
 
}).name; 
 

 
console.log(name)

+0

' find' ist Teil von ES6 – pwolaq

+0

ganz zu schweigen davon, dass es einen Fehler geben wird, wenn es kein Element mit der angegebenen ID gibt – pwolaq

2

In ES5 Umgebung, können Sie Array#some verwenden, wenn Sie nur ein Ergebnis erwarten.

var data = { "main": [{ "id": "123", "name": "name 1" }, { "id": "234", "name": "name 2" }] }, 
 
    result; 
 

 
data.main.some(function (a) { 
 
    if (a.id === '234') { 
 
     result = a; 
 
     return true; 
 
    } 
 
}); 
 

 
console.log(result);

Wenn Sie mehr als eine Ergebnismenge erwarten, können Sie besser nutzen Array#filter

var data = { "main": [{ "id": "123", "name": "name 1" }, { "id": "234", "name": "name 2a" }, { "id": "234", "name": "name 2" }] }, 
 
    result = data.main.filter(function (a) { 
 
     return a.id === '234'; 
 
    }); 
 

 
console.log(result);

In ES6 Umgebung, Sie Array#find für die verwenden könnte erstes gefundenes Element, aber Wenn es mehr zu finden gibt, verwenden Sie Array#filter.

var data = { "main": [{ "id": "123", "name": "name 1" }, { "id": "234", "name": "name 2" }] }, 
 
    result = data.main.find(a => a.id === '234'); 
 

 
console.log(result);

Verwandte Themen