par exemple, j'ai ce tableau:
$scope.records = [
{
"Name" : "Alfreds Futterkiste",
"Country" : "Germany"
},
{
"Name" : "Berglunds snabbköp",
"Country" : "Sweden"
},
{
"Name" : "Centro comercial Moctezuma",
"Country" : "Mexico"
},
{
"Name" : "Ernst Handel",
"Country" : "Austria"
}
];
Comment obtenir l'index de valeur d'un objet? avec l'exemple "Pays": "Autriche" cet indice est 3
Vous pouvez utiliser Array.findIndex
dans les navigateurs les plus récents, mais cela n’est pas pris en charge dans Internet Explorer, seul 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
Pour prendre en charge IE9 et les versions ultérieures, vous pouvez utiliser Array.some
à la place.
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);
Vous pouvez utiliser array.findIndex
pour cela:
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)
Remarque: array.findIndex fait partie de 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);
}
Vous pouvez faire ce qui retourne les pays puis trouve le pays.
$scope.records.map((item) => { return item.Country;}).indexOf('Austria')
Le problème avec le code ci-dessus parcourt une fois chaque élément pour générer une carte, puis trouve l'index. Vous pouvez utiliser une simple boucle for:
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;
}
J'ai remarqué beaucoup de solutions findIndex. Remarque: la méthode FindIndex a été ajoutée à la spécification ECMAScript 6 et peut ne pas encore être disponible dans toutes les implémentations JavaScript conformément à MDN.
Vous pouvez utiliser le polyfill pour findIndex ( https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex ) et utiliser la solution findIndex proposée par d'autres. Si vous ne voulez pas utiliser le polyfill, vous pouvez utiliser la carte et l'index que je mets comme solution.
En utilisant une boucle for-in, comme il s’agit d’un tableau JSON, vous pouvez le faire.
for(i in records) {
if(records[i].country=="Austria")
console.log("index is :"+ parseInt(i)); // print index
}
J'ai enregistré cette méthode et ça marche comme un charme,
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