Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript:从数组中分组数据_Javascript_Angularjs_Arrays_Node.js - Fatal编程技术网

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