所以我有这个数组
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有能力做到这一点?谢谢。
答案 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
虽然功能似乎很大。但它的确有效。我试图找到一些替代方式。如果得到相同的话,会很快更新。