web-dev-qa-db-de.com

finden Sie Index des Objekts ein Array anglejs

zum Beispiel habe ich dieses Array:

  $scope.records = [
    {
      "Name" : "Alfreds Futterkiste",
      "Country" : "Germany"
    },
    {
      "Name" : "Berglunds snabbköp",
      "Country" : "Sweden"
    },
    {
      "Name" : "Centro comercial Moctezuma",
      "Country" : "Mexico"
    },
    {
      "Name" : "Ernst Handel",
      "Country" : "Austria"
    }
  ];

Wie erhalte ich einen Wertindex vom Objekt? am Beispiel "Land": "Österreich" ist dieser Index 3 

3
Edu Arif

Sie könnten Array.findIndex in den neuesten Browsern verwenden, aber in Internet Explorer wird dies nicht unterstützt, nur Edge

let $scope = {};

$scope.records = [
    {
      "Name" : "Alfreds Futterkiste",
      "Country" : "Germany"
    },
    {
      "Name" : "Berglunds snabbköp",
      "Country" : "Sweden"
    },
    {
      "Name" : "Centro comercial Moctezuma",
      "Country" : "Mexico"
    },
    {
      "Name" : "Ernst Handel",
      "Country" : "Austria"
    }
];

let index = $scope.records.findIndex( record => record.Country === "Austria" );

console.log(index); // 3

Für die Unterstützung in IE9 und höher können Sie stattdessen Array.some verwenden

var $scope = {};

$scope.records = [{
  "Name": "Alfreds Futterkiste",
  "Country": "Germany"
}, {
  "Name": "Berglunds snabbköp",
  "Country": "Sweden"
}, {
  "Name": "Centro comercial Moctezuma",
  "Country": "Mexico"
}, {
  "Name": "Ernst Handel",
  "Country": "Austria"
}];

var index = -1;

$scope.records.some(function(obj, i) {
  return obj.Country === "Austria" ? index = i : false;
});

console.log(index);

7
adeneo

Sie können array.findIndex dafür verwenden:

var d = [{
  "Name": "Alfreds Futterkiste",
  "Country": "Germany"
}, {
  "Name": "Berglunds snabbköp",
  "Country": "Sweden"
}, {
  "Name": "Centro comercial Moctezuma",
  "Country": "Mexico"
}, {
  "Name": "Ernst Handel",
  "Country": "Austria"
}];
var searchCountry = "Austria"
var index = d.findIndex(x=>x.Country === searchCountry)
console.log(index)

Hinweis: array.findIndex ist Teil von ES6.

11
Rajesh
Use findIndex method - 
   var index = $scope.records.findIndex(x=>x.Country==='Austria')
2
Chetan
function getIndexByCountryName(country)
    var found = $scope.records.find(function(item){return item.Country === country});
    return $scope.records.indexOf(found);
}
0
Makarov Sergey

Sie können tun, welche Länder zurückgegeben werden und dann das Land finden.

$scope.records.map((item) => { return item.Country;}).indexOf('Austria')

Das Problem mit dem obigen Code durchläuft jedes Element einmal, um eine Map zu generieren, und sucht dann den Index. Sie können eine einfache for-Schleife verwenden:

var index = (arr, k, v) => { 
   var i = -1;len = (arr || []).length;  
   for (i = 0; i < len; i++) { 
     if (arr[i][k] === v) 
       return i;
   }
   return -1;
} 

Ich habe viele findIndex-Lösungen gesehen. Bitte beachten Sie: Die FindIndex-Methode wurde der ECMAScript 6-Spezifikation hinzugefügt und ist möglicherweise noch nicht in allen JavaScript-Implementierungen gemäß MDN verfügbar.

Sie können den Polyfill für findIndex ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex ) verwenden und die von anderen vorgeschlagene Lösung verwenden. Wenn Sie den Polyfill nicht verwenden möchten, können Sie die Map und den IndexOf verwenden, den ich als Lösung stelle.

Wenn Sie eine for-in-Schleife verwenden, da es sich um ein JSON-Array handelt, können Sie dies tun

for(i in records) {
if(records[i].country=="Austria") 
console.log("index is :"+ parseInt(i)); // print index
}
0
Sid

Ich habe diese Methode registriert und funktioniert wie ein Zauber. 

Array.prototype.getIndexByValue = function (name, value) {
        for (var i = 0, len=this.length; i <len; i++) {
            if (this[i][name]) {
                if (this[i][name] === value) {
                    return i
                }
            }
        }
        return -1;
    };

var d = [{
  "Name": "Alfreds Futterkiste",
  "Country": "Germany"
}, {
  "Name": "Berglunds snabbköp",
  "Country": "Sweden"
}, {
  "Name": "Centro comercial Moctezuma",
  "Country": "Mexico"
}, {
  "Name": "Ernst Handel",
  "Country": "Austria"
}];


var index = d.getIndexByValue('Country','Austria');
console.log(index)//will print 3
0
Siddharth