如何在控制器中获取数组项的索引位置,传递angularjs中的值

时间:2014-06-17 11:27:53

标签: angularjs angularjs-scope

我有一个包含值列表的数组。

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

我想根据id中的值获取数组项的索引。如何在angularJS控制器中获取值为id = 4的数组项的索引位置?

4 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:10)

这不是angularjs特定的问题,而是普通的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;
            }
     }
}

答案 2 :(得分:3)

您可以使用map()函数迭代数组中的每个对象并检查任何所需的属性。例如,如果您有一个对象数组

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

获取数组中第二个对象的索引使用

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

返回id属性中包含值2的对象的索引。

答案 3 :(得分:1)

将要从数组中删除的id传递给控制器​​中的给定函数(函数可以在同一控制器中,但希望将其保留在服务中)。

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