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
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);
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.
Use findIndex method -
var index = $scope.records.findIndex(x=>x.Country==='Austria')
function getIndexByCountryName(country)
var found = $scope.records.find(function(item){return item.Country === country});
return $scope.records.indexOf(found);
}
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
}
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