从重复值中筛选具有唯一值的对象数组

Filter array of object with unique value from duplicate values

本文关键字:唯一 对象 数组 筛选      更新时间:2023-09-26
var  Error-dictionary = [
   {
      code:599,
      MSG:'unknown' 
   },
   {
      code:404, 
      MSG:'not found'
   },
   {
      code:599, 
      MSG:'unknown'
   }
]

我想要这样的东西:

[
  {
     code : 599,
     count:2,  
     MSG : 'unknown', 
     code :404,
     count:1,
     MSG : 'not found' 
  }
] 

和这个需要推入$scope.alerts作为味精

错误码和MSG是动态的

可以通过使用underscore.js获得对象数组中特定属性的编号。很好很简单!!

<script src="http://underscorejs.org/underscore-min.js"></script>
<script>
  window.onload = function () {
    var dict = [
      {code: 599, MSG: 'unknown' },
      {code: 404, MSG: 'not found'},
      {code: 599, MSG: 'unknown'}
    ];
    var res = _.groupBy(dict, function (d) {
      return d.code;
    });
      var dictArr = []; 
        for(var key in res) {
            var code = key; 
            var value = res[key]; 
            var MSG = value[0].MSG; 
            var count = value.length; 
            dictArr.push({ code : code, MSG: MSG, count: count  }); 
        }; 
        console.log(dictArr); 

  };
</script>

创建一个使用错误代码和消息作为键的临时对象。然后将该临时对象映射到输出数组

var tmp = {}, res =[];
data.forEach(function (item) {
    var tmpKey = item.code + item.MSG;
    if (!tmp.hasOwnProperty(tmpKey)) {
        tmp[tmpKey] = angular.copy(item);
        tmp[tmpKey].count = 0;
    }
    tmp[tmpKey].count++;
});
for( var key in tmp){
   res.push(tmp[key]; 
}
$scope.errors = res;
console.log($scope.errors);