验证数组javascript angularjs上是否有多个索引

时间:2014-07-21 08:12:02

标签: javascript arrays angularjs

所以我有这个数组

array = [
{id:1,value:1},
{id:2,value:1},
{id:1,value:2},
{id:1,value:3},
{id:2,value:2},
{id:1,value:4},
{id:2,value:3}
]

我想整理出来并制作像这样的输出

array = [
{id:1,value:4},
{id:2,value:3}
]

我想使用javascript实现这一点,还是angularjs有能力做到这一点?谢谢。

3 个答案:

答案 0 :(得分:2)

您好,请看http://jsbin.com/nozag/2/edit?html,js,output

var app = angular.module('app', []);

app.controller('firstCtrl', function($scope){
 $scope.array = [
{id:1,value:1},
{id:2,value:1},
{id:1,value:2},
{id:1,value:3},
{id:2,value:2},
{id:1,value:4},
{id:2,value:3}
];
  $scope.uniq = [];

  for (var i=$scope.array.length-1; i>0; i--)
    {
     var arr = $scope.array[i];

      var contains = false;

      angular.forEach($scope.uniq, function(u){

        if (u.id==arr.id) 
          {
            contains = true;

          }


      });

      if(!contains){
         $scope.uniq.push(arr);

      }



    }
});

答案 1 :(得分:0)

假设您想要计算具有特定ID的对象的数量,那么在Underscore.js中定义countBy怎么样?

array = _.countBy(array, function(obj) { return obj.id; });

答案 2 :(得分:0)

在java脚本中编写group by函数

function groupBy( array , f )
{
  var groups = {};
  array.forEach( function( o )
  {
    var group = JSON.stringify( f(o) );
    groups[group] = groups[group] || [];
    groups[group].push( o );  
  });
  return Object.keys(groups).map( function( group )
  {
    return groups[group]; 
  })
}

并将其命名为

var result = groupBy(list, function(item)
{
  return [item.id];
});

在你的情况下将返回数据,即结果的值将是

   [
    [
      Object { id=1, value=1},
      Object { id=1, value=2},
      Object { id=1, value=3}, 
      Object { id=1, value=4}
    ], 
    [
      Object { id=2, value=1},
      Object { id=2, value=2},
      Object { id=2, value=3}
    ]
  ]

现在编写一个函数来汇总具有相同id的值

function getData(groupByCategory)
{
  var  finalData=[];
    for(var i=0;i< groupByCategory.length;i++)
    {
    var temp=0;
        for(var j=0;j<groupByCategory[i].length;j++)
        {
            temp+=parseInt(groupByCategory[i][j].value);
        }
        finalData.push({"category":groupByCategory[i][0].id, "value":temp})
    }
   console.log(finalData);//final data is your required results
}

并将其称为 的getData(结果); 工作小提琴是here

虽然功能似乎很大。但它的确有效。我试图找到一些替代方式。如果得到相同的话,会很快更新。