как получить индексную позицию элемента массива в контроллере, передавая значение в angularjs

У меня есть массив со списком значений.

 [Object { id="5", country="UAE"}, Object { id="4", country="India"}]

Я хочу получить индекс элемента массива на основе значения, присутствующего в id. Как я могу получить позицию индекса элемента массива со значением id = 4 в angularJS Controller?

Ответы

Ответ 1

Метод angularjs (с использованием $ filter) будет чем-то вроде этого

app.controller('MainCtrl', ['$scope', '$filter', function($scope, $filter) {

    //array
    var items = [{  id: "5", country: "UAE" }, { id: "4",  country: "India" }];

    //search value
    var id2Search = "4";

    //filter the array
    var foundItem = $filter('filter')(items, { id: id2Search  }, true)[0];

    //get the index
    var index = items.indexOf(foundItem );
}]);

Ответ 2

это не проблема с угловой спецификой, а обычный javascript. просто зациклировать и вернуть индекс

var list =  [{ id="5", country="UAE"}, { id="4", country="India"}];

for (var i = 0; i < list.length ; i++) {
        if (list[i][id] === 4) {
            return i;
        }
 }

вы можете сделать его общим, сделав его функцией в массиве, который принимает значение и имя свойства

Array.prototype.getIndexOfObject = function(prop, value){
   for (var i = 0; i < this.length ; i++) {
            if (this[i][prop] === value) {
                return i;
            }
     }
}

Ответ 3

Вы можете использовать функцию map() для итерации по каждому объекту в вашем массиве и проверки любого требуемого свойства. Например, если у вас есть массив объектов

$scope.items = 
[
{'id':'1','name':'item1'},
{'id':'2','name':'item2'}
];

для получения индекса второго объекта в массиве используйте

var index = $scope.items.map(function (item) {
            return item.id;
        }).indexOf(2);

возвращает индекс объекта, содержащего значение 2 в свойстве id.

Ответ 4

Передайте идентификатор, который вы хотите удалить из массива, данной функции из контроллера (функция может быть в том же контроллере, но предпочитать хранить ее в службе).

  function removeInfo(id) {
    let item = Object .filter(function(item) {
      return Object.id === id;
    })[0];
    let index = Object.indexOf(item);
  }