2017-08-22 11 views
0

ich sehen kann, diese für die Suche ein einfaches Array funktioniert gut:Suche Array mit mehreren Schlüsseln

var arr1 = ['a','b','c','d','e']; 
var index1 = arr1.indexOf('d'); 
console.log("index1:" + index1); // index1:3 

Wenn ich versuche, die gleiche Sache für eine andere Art von Array zu tun, ist es nicht die „jane finden "Wert:

var arr2 = [{"id":0,"name":"petty"},{"id":1,"name":"jane"},{"id":2,"name":"with"}]; 
var index2 = arr2.indexOf('jane'); 
console.log("index2:" + index2); // index2:-1 

Entschuldigung - ich weiß, ich vermisse wahrscheinlich etwas offensichtlich. Ich habe auf SO/google für die Suche nach mehrdimensionalen Arrays gesucht, aber ich weiß nicht einmal, ob das Array im zweiten Beispiel ein 2d/multidimensionales Array ist, also bin ich wahrscheinlich nicht auf der Suche nach dem richtigen Ding.

+2

Mögliches Duplikat [Wie durch seine Eigenschaft in JavaScript Index von Objekt erhalten] (https://stackoverflow.com/questions/7176908/how-to-get- index-of-object-by-its-property-in-javascript) –

+1

'arr2' ist kein multidimensionales Array, aber es ist ein Array von Objekten, bemerken Sie das' {} ', es bedeutet Objekt. –

Antwort

1

Sie können die Methode findIndex() verwenden, um den Index des Objekts mit einem bestimmten Wert zu finden.

var arr = [{"id":0,"name":"petty"},{"id":1,"name":"jane"},{"id":2,"name":"with"}]; 
 

 
var index = arr.findIndex(e => e.name == 'jane') 
 
console.log("index: " + index);

+0

Ziemlich ordentlich, das ist ein Generator richtig? –

+0

Ich möchte darauf hinweisen, dass 'findIndex' nur in ECMAScript 2015 hinzugefügt wurde und nicht mit einigen Browsern (insbesondere Internet Explorer) kompatibel ist. Siehe https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex –

0

Zunächst einmal: es ist nicht ein mehrdimensionales Array. Es ist ein Array aus Objekten. Es ist eindimensional. ein Objekt, das Sie durch ein Array zu durchlaufen müssen zu finden und die benötigten Schlüssel überprüfen, z.B .:

arr.findIndex(function(el) { return el.name === 'jane' }) 
0

Sie können alle Werte der Objekte prüfen und Array#findIndex statt Array#indexOf verwenden.

var arr2 = [{ id: 0, name: "petty" }, { id: 1, name: "jane" }, { id: 2, name: "with" }], 
 
    index2 = arr2.findIndex(o => Object.values(o).some(v => v === 'jane')); 
 

 
console.log(index2);

+0

Verschachtelte Iteratoren/Generatoren scheinen ziemlich ineffizient zu sein, wie Nenad bereits geschrieben hat. Das wird besser: 'arr.findIndex (e => e.name == 'jane')' –

+1

@JonasLibbrecht, richtig, aber nur wenn du den Schlüssel im Voraus kennst. –

+0

@ Nina Scholz, das ist richtig, aber dann machst du eine Nadel in einer Heuhaufen-Suche und das ist im Grunde genommen ineffizient und sollte nicht so implementiert werden. Dieses Problem wäre besser mit binären Bäumen oder etwas anderem gelöst. –

0
var arr = [{"id":0,"name":"petty"},{"id":1,"name":"jane"},{"id":2,"name":"with"}]; 
arr.findIndex((item)=>{return item.name=="petty"}) 
//output is 0 
Verwandte Themen