AngularJS:查找原始数组中过滤值的索引位置

33
$scope.data = [
    {
    "name": "Jim",
    "id" : 25
    },
    {
    "name": "Jerry",
    "id": 27
    },
    {
    "name": "Rithika",
    "id": 20
    }
    ];

    <div ng-repeat="person in data | filter: {id:20}">
        {{parent_index}}
    </div>

parent_index - 实际数组中筛选元素的索引。

在这个例子中,parent_index 应该返回 2。如何找到它呢?


你尝试过使用 $index 吗?它是重复元素的迭代器偏移量。 - Satpal
请提供更多关于您的问题的信息,目前不够清晰并且缺少一些数据:parent_index是什么,var data超出了范围,而且ng-repeat也无法工作。 - Maxim Shoustin
$index 返回零,因为过滤后的数组只有一个值 [{"name" : "Rithika", "id" : 20 }]。 - Thilaga
@MaximShoustin的问题已更新。如果不清楚,请告诉我。 - Thilaga
3个回答

81

找到筛选后的数值在原始数组中的索引位置。

试试这个:

<div ng-repeat="person in data | filter: {id:20}">
    {{data.indexOf(person)}}
</div>

输出:2

示例 Fiddle


如果您需要在控制器或服务中使用 $filter('filter') 进行搜索,则它会返回一组匹配项,因此您无法直接将结果传递给 indexOf。在我的情况下,我正在使用唯一键进行过滤,因此可以安全地执行类似 index = data.indexOf(person[0]) 的操作。 - Parris Varney
3
哈哈!感谢您在12月9日留下的评论,Parris Varney在5月9日也遇到了同样的问题。 - Parris Varney

5
这里有一个小帮手函数,可以根据给定的属性值在数组中查找对象的索引:
function getIndexOf(arr, val, prop) {
      var l = arr.length,
        k = 0;
      for (k = 0; k < l; k = k + 1) {
        if (arr[k][prop] === val) {
          return k;
        }
      }
      return false;
    }

例子:

var arrOfobj = [
       {a:1, b:1, c:1}, //index 0
       {a:2, b:2, c:2}, //index 1
       {a:3, b:3, c:3} //index 2
    ];
var index = getIndexOf(arrOfobj, "2", "a");

上面的脚本将导致索引为1,因为数组中第二个对象的属性"a"的值为2。


2
您可以使用$index值进行循环。
<div ng-repeat="person in data | filter: {id:20}">{{$index+1}}<div>

3
这不会给你原始数组中的索引值,而只会给出筛选后的数组。 - m.e.conroy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接