【问题标题】:How to get the indexOf an object within an AngularJS response object collection?如何在 AngularJS 响应对象集合中获取对象的 indexOf?
【发布时间】:2014-05-31 22:53:21
【问题描述】:

用例

我有一组从 REST 请求返回的对象。 Angular 会自动使用$$hashKey 填充每个元素。问题是当我在该数组中搜索没有$$hashKey 的对象时,它返回-1。这是有道理的。不幸的是,我不知道$$hashKey 的值。

问题

有没有更有效的方法来搜索从 AngularJS 中的 REST 请求返回的对象集合中的对象,而无需剥离 $$hashKey 属性?

代码

function arrayObjectIndexOf(arr, obj) {
var regex = /,?"\$\$hashKey":".*?",?/;
    var search = JSON.stringify(obj).replace(regex, '');
    console.log(search);
    for ( var i = 0, k = arr.length; i < k; i++ ){
        if (JSON.stringify(arr[i]).replace(regex, '') == search) {
            return i;
        }
    };
    return -1;
};

【问题讨论】:

    标签: javascript arrays angularjs


    【解决方案1】:

    既然是棱角分明,何不使用过滤:

    $filter('filter')(pages, {id: pageId},true);

    其中 pages 是数组,id 是要匹配的对象属性,pageId 是要匹配的值。

    【讨论】:

      【解决方案2】:

      angular.equals() 对没有$ 前缀属性的对象进行深度比较...

      function arrayObjectIndexOf(arr, obj){
          for(var i = 0; i < arr.length; i++){
              if(angular.equals(arr[i], obj)){
                  return i;
              }
          };
          return -1;
      }
      

      【讨论】:

      • 简洁优雅!我真的需要坐下来阅读整个 Angular 文档。
      • 效果很好!除了我命名我的:indexOfObject :)
      【解决方案3】:

      好的,所以这有点难看,但这是最简单的解决方案:

      function arrayObjectIndexOf(arr, obj) {
          JSON.parse(angular.toJson(arr)).indexOf(obj)
      }
      

      angular.toJson 位会剔除所有以 $ 开头的属性。您可能只想将干净的对象存储在某处以进行搜索。或者,您可以编写自己的比较内容,但这只是废话。

      【讨论】:

        【解决方案4】:

        使用lodash的find、where、filter来操作集合,查看文档http://lodash.com/docs

        【讨论】:

        • 忘记在帖子中提到我们的首席程序员只允许我们使用 Angular。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 2023-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多