JavaScript:从数组中分组数据
我有一个多维数组,希望根据特定索引值处的值对其进行过滤。看起来是这样的:JavaScript:从数组中分组数据,javascript,angularjs,arrays,node.js,Javascript,Angularjs,Arrays,Node.js,我有一个多维数组,希望根据特定索引值处的值对其进行过滤。看起来是这样的: arr=[ [1101,‘新职位’,0], [2101,‘新职位’,1], [3102,‘另一篇帖子’,0], [4,101,‘新职位’,1], [5102,‘另一个帖子’,1], [6103,‘第三岗位’,1] ]这是一种非常暴力的方法,但它确实有效。顺便说一下,我会按id而不是标题合并您的项目,因为在您的示例中,标题框不匹配 var merged = {}; for (var i = 0; i < arr.le
arr=[
[1101,‘新职位’,0],
[2101,‘新职位’,1],
[3102,‘另一篇帖子’,0],
[4,101,‘新职位’,1],
[5102,‘另一个帖子’,1],
[6103,‘第三岗位’,1]
]
这是一种非常暴力的方法,但它确实有效。顺便说一下,我会按id而不是标题合并您的项目,因为在您的示例中,标题框不匹配
var merged = {};
for (var i = 0; i < arr.length; i++) {
if (!merged[arr[i][1]]) {
merged[arr[i][1]] = {likes: arr[i][3], id: arr[i][1], title: arr[i][2]};
} else {
merged[arr[i][1]].likes += arr[i][3];
}
}
var result_arr = [];
for (var post in merged) {
var p = merged[post];
result_arr.push([p.id, p.title, p.likes]);
}
var合并={};
对于(变量i=0;i
另一种方法,使用reduce
创建组,然后将它们分散回阵列
const arr=[
[1101,‘新职位’,0],
[2101,‘新职位’,1],
[3102,‘另一篇帖子’,0],
[4,101,‘新职位’,1],
[5102,‘另一个帖子’,1],
[6103,‘第三岗位’,1]
];
const groups=arr.reduce((组,当前)=>{
if(组[当前[1]]){
组[当前[1]][2]+=当前[3];
}否则{
组[current[1]]=current.slice(1);
}
返回组;
}, {});
const result=Object.keys(groups.map((key)=>groups[key]);
控制台日志(结果)代码>只需减少数组,并使用对象作为每个帖子的映射,就像使用帖子id作为键一样。如果使用映射中的键找到任何对象,请添加post值,否则请从输入数组中添加post id条目。我们开始:
var数组=[
[1101,‘新职位’,0],
[2101,‘新职位’,1],
[3102,‘另一篇帖子’,0],
[4,101,‘新职位’,1],
[5102,‘另一个帖子’,1],
[6103,‘第三岗位’,1]
];
函数合并数组(数组){
var o=array.reduce(函数(init,每个){
var ex=init[each[1]];
如果(ex){
ex[2]+=每个[3];
}else{init[each[1]]=each.slice(1);}
返回init;
}, {});
返回Object.values(o);
}
log('Result:',mergeArray(array))
你是在一个节点中做这件事的吗?您正在使用的nodejs
的版本是什么?对于你的问题,我可能有更好的解决方案。不,我没有做node.js。我正在d3js中使用它,并从excel文件中获取此类数据。好的,然后为你添加了一个答案,请检查@Mayank