【问题标题】:AngularJS: find the index position of filtered value in the original arrayAngularJS:找到原始数组中过滤值的索引位置
【发布时间】:2017-03-15 06:58: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,重复元素的迭代器偏移
  • 请提供有关您的问题的更多信息,它不清楚并遗漏了一些数据:parent_index 是什么,var data 超出了范围,并且确定 ng-repeat 不起作用
  • $index 返回零。因为过滤后的数组只有一个值 [{"name" : "Rithika", "id" : 20 }]
  • @MaximShoustin 问题已更新。如果不清楚,请告诉我

标签: angularjs angularjs-ng-repeat


【解决方案1】:

在原始数组中找到过滤值的索引位置

试试这个:

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

输出:2

演示Fiddle

【讨论】:

  • 如果您碰巧使用$filter('filter') 在控制器或服务中进行搜索,那么它会返回一个匹配数组,因此您不能直接将结果传递给indexOf。在我的情况下,我正在过滤一个唯一的密钥,所以我可以安全地执行类似index = data.indexOf(person[0]) 的操作
  • 哈!感谢 12 月 9 日 Parris Varney 的评论 - 5 月 9 日的 Parris Varney 遇到了同样的问题。
【解决方案2】:

这是一个小辅助函数,用于在给定属性值上查找数组中对象的索引:

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

上面的脚本会导致 index = 1,因为属性“a”在数组的第二个对象中的值为 2。

【讨论】:

    【解决方案3】:

    您可以为循环使用$index 值。

    <div ng-repeat="person in data | filter: {id:20}">{{$index+1}}<div>
    

    【讨论】:

    • 这不会给你原始数组中的索引值,只有过滤后的数组。
    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 2016-10-08
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多