530 Stimmen

Holen Sie sich den Index des Objekts in einem Array, das einer Bedingung entspricht

Ich habe ein Array wie dieses:

[{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"},...]

Wie kann ich den Index des Objekts erhalten, das einer Bedingung entspricht, ohne das gesamte Array zu durchlaufen?

Zum Beispiel, gegeben prop2=="yutu", möchte ich den Index 1 erhalten.

Ich habe .indexOf() gesehen, aber ich denke, es wird für einfache Arrays wie ["a1","a2",...] verwendet. Ich habe auch $.grep() überprüft, aber das gibt Objekte zurück, nicht den Index.

10voto

German Punkte 999

Mit Array.map() und Array.indexOf(string)

const arr = [{
  prop1: "abc",
  prop2: "qwe"
}, {
  prop1: "bnmb",
  prop2: "yutu"
}, {
  prop1: "zxvz",
  prop2: "qwrq"
}]

const index = arr.map(i => i.prop2).indexOf("yutu");

console.log(index);

5voto

Ich habe viele Lösungen oben gesehen.

Hier benutze ich die map-Funktion, um den Index des Suchtexts in einem Array-Objekt zu finden.

Ich werde meine Antwort erklären, indem ich Schülerdaten verwende.

  • Schritt 1: Array-Objekt für die Schüler erstellen (optional können Sie Ihr eigenes Array-Objekt erstellen).
    var students = [{name:"Rambabu",htno:"1245"},{name:"Divya",htno:"1246"},{name:"poojitha",htno:"1247"},{name:"magitha",htno:"1248"}];

  • Schritt 2: Variable zum Suchen von Text erstellen
    var studentNameToSearch = "Divya";

  • Schritt 3: Variable erstellen, um den übereinstimmenden Index zu speichern (hier verwenden wir die map-Funktion zum Iterieren).
    var matchedIndex = students.map(function (obj) { return obj.name; }).indexOf(studentNameToSearch);

    var students = [{name:"Rambabu",htno:"1245"},{name:"Divya",htno:"1246"},{name:"poojitha",htno:"1247"},{name:"magitha",htno:"1248"}];

    var studentNameToSearch = "Divya";

    var matchedIndex = students.map(function (obj) { return obj.name; }).indexOf(studentNameToSearch);

    console.log(matchedIndex);

    alert("Ihr Suchname Index im Array ist:" + matchedIndex)

3voto

GibboK Punkte 67729

Du kannst das Array.prototype.some() auf folgende Weise verwenden (wie in den anderen Antworten erwähnt):

https://jsfiddle.net/h1d69exj/2/

function findIndexInData(data, property, value) {
    var result = -1;
    data.some(function (item, i) {
        if (item[property] === value) {
            result = i;
            return true;
        }
    });
    return result;
}
var data = [{prop1:"abc",prop2:"qwe"},{prop1:"bnmb",prop2:"yutu"},{prop1:"zxvz",prop2:"qwrq"}]

alert(findIndexInData(data, 'prop2', "yutu")); // zeigt Index von 1

3voto

pranabesh chand Punkte 81
function findIndexByKeyValue(_array, key, value) {
    for (var i = 0; i < _array.length; i++) { 
        if (_array[i][key] == value) {
            return i;
        }
    }
    return -1;
}
var a = [
    {prop1:"abc",prop2:"qwe"},
    {prop1:"bnmb",prop2:"yutu"},
    {prop1:"zxvz",prop2:"qwrq"}];
var index = findIndexByKeyValue(a, 'prop2', 'yutu');
console.log(index);

2voto

Homen Punkte 1222

Ein weiterer einfacher Weg ist :

 function getIndex(items) {
        for (const [index, item] of items.entries()) {
            if (item.prop2 === 'yutu') {
                return index;
            }
        }
    }

const myIndex = getIndex(myArray);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X