比较Javascript对象的ID,在Angular / JS中创建一个唯一的列表

时间:2017-01-26 13:31:43

标签: javascript angularjs

我调用了github API,它给了我一个包含其提交的对象数组。我想循环遍历这个并获得一个唯一的commitor列表,并以以下格式构建它:

{"id":temp,"label":temp,"type": "number","p": {} }

所以我可以给它做图。

我写了以下内容:

$scope.git = response.data;
    $scope.o=[];
    angular.forEach($scope.git,function(value){
      var temp = value.commit.author.name;
      if($scope.o.length==0){
        $scope.o.push({"id":temp,"label":temp,"type": "number",
            "p": {}
      })
      }
      else{
      angular.forEach($scope.o,function(ob){
        if(ob.id==temp){
          continue;
        }
        else{
          $scope.o.push({"id":temp,"label":temp,"type": "number",
              "p": {}
        })
      }
      });
}
})

这有效,但效率非常低。这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以使用对象检查作者是否已插入列表中。类似的东西:

$scope.o = [];
var authors = {};
angular.forEach($scope.git, function(value){
    var temp = value.commit.author.name;
    if (authors[temp] === undefined) {
        $scope.o.push({"id":temp,"label":temp,"type": "number", "p": {} });
        authors[temp]  = true;
    }
});

答案 1 :(得分:0)

你也可以使用像下划线或lodash.one这样的方法,这将是有用的方法__uniqBy.Here是相同的文档 https://lodash.com/docs/4.17.4#uniqBy