web-dev-qa-db-fra.com

trouver l'index de l'objet un tableau angularjs

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 

3
Edu Arif

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);

7
adeneo

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.

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

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
}
0
Sid

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
0
Siddharth