359 Stimmen

Wie kann ich den Index eines Objekts anhand seiner Eigenschaft in JavaScript ermitteln?

Ich habe zum Beispiel:

var Data = [
  { id_list: 1, name: 'Nick', token: '312312' },
  { id_list: 2, name: 'John', token: '123123' },
]

Dann möchte ich sortieren/umkehren dieses Objekt durch name zum Beispiel. Und dann möchte ich so etwas wie das hier bekommen:

var Data = [
  { id_list: 2, name: 'John', token: '123123' },
  { id_list: 1, name: 'Nick', token: '312312' },
]

Und jetzt möchte ich den Index des Objekts mit der Eigenschaft name='John' um den Wert des Eigenschafts-Tokens zu erhalten.

Wie kann ich das Problem lösen?

5voto

Andrew D. Punkte 7890

Die einzige mir bekannte Möglichkeit ist, eine Schleife durch alle Arrays zu ziehen:

var index = -1;
for(var i=0; i<Data.length; i++)
  if(Data[i].name === "John") {
    index = i;
    break;
  }

Oder Groß- und Kleinschreibung wird nicht berücksichtigt:

var index = -1;
for(var i=0; i<Data.length; i++)
  if(Data[i].name.toLowerCase() === "john") {
    index = i;
    break;
  }

Bei der Ergebnisvariablen Index enthält den Index des Objekts oder -1, wenn es nicht gefunden wurde.

2voto

Patrik Wallin Punkte 56

Ein prototypischer Weg

(function(){
  if (!Array.prototype.indexOfPropertyValue){
       Array.prototype.indexOfPropertyValue = function(prop, value){
      for (var index = 0; index < this.length; index++){
        if (this[index][prop]){
          if (this[index][prop] == value){
            return index;
          }
        }
       }
      return -1;
    }
  }
 })();

 // Usage:
 var Data = [
   {id_list:1, name:'Nick', token:'312312'}, {id_list:2, name:'John', token:'123123'}];

 Data.indexOfPropertyValue('name', 'John'); // Returns 1 (index of array);
 Data.indexOfPropertyValue('name', 'Invalid name') // Returns -1 (no result);
 var indexOfArray = Data.indexOfPropertyValue('name', 'John');
 Data[indexOfArray] // Returns the desired object.

2voto

Sakhri Houssem Punkte 865

Können Sie die Filtermethode verwenden

 const filteredData = data.filter(e => e.name !== 'john');

1voto

Eugene Lyzo Punkte 99
collection.findIndex(item => item.value === 'smth') !== -1

1voto

Itay Merchav Punkte 797
let indexOf = -1;
let theProperty = "value"
let searchFor = "something";

theArray.every(function (element, index) {

    if (element[theProperty] === searchFor) {
        indexOf = index;
        return false;
    }
    return true;
});

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