JavaScript:从数组中分组数据
Posted
技术标签:
【中文标题】JavaScript:从数组中分组数据【英文标题】:JavaScript: Group data from array 【发布时间】:2018-02-06 01:39:23 【问题描述】:我有一个多维数组,想根据特定索引值的值对其进行过滤。它看起来像这样:
arr = [
[1 , 101 , 'New post ', 0],
[2 , 101 , 'New Post' , 1],
[3 , 102 , 'another post' ,0],
[4 , 101 , 'New post' ,1],
[5 , 102 , 'another post' , 1],
[6 , 103 , 'third post' ,1]
]
我想根据 postId 过滤这个数组,得到同名标题的总和。结果如下所示:
result_arr = [
[101 , 'New post', 2],
[102 , 'another post' ,1],
[103 , 'third post' ,1]
]
【问题讨论】:
您是在nodejs
中做的吗?您使用的nodejs
是什么版本?对于您的问题,我可能有更好的解决方案
不,我没有做 node.js ..我在 d3js 中使用它并从 excel 文件中获取此类数据。
好的,然后为您添加了答案,请检查@Mayank
【参考方案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]);
【讨论】:
【参考方案2】:另一种方法,使用reduce
创建组,然后将它们传播回数组。
const arr = [
[1, 101, 'New post ', 0],
[2, 101, 'New Post', 1],
[3, 102, 'another post', 0],
[4, 101, 'New post', 1],
[5, 102, 'another post', 1],
[6, 103, 'third post', 1]
];
const groups = arr.reduce((groups, current) =>
if (groups[current[1]])
groups[current[1]][2] += current[3];
else
groups[current[1]] = current.slice(1);
return groups;
, );
const result = Object.keys(groups).map((key) => groups[key]);
console.log(result);
【讨论】:
【参考方案3】:只需减少数组,并使用一个对象作为每个帖子的映射,就像使用帖子 ID 作为键一样。如果使用映射中的键找到任何对象,则添加帖子值,否则为输入数组中的帖子 ID 添加条目。我们开始吧:
var array = [
[1, 101, 'New post ', 0],
[2, 101, 'New Post', 1],
[3, 102, 'another post', 0],
[4, 101, 'New post', 1],
[5, 102, 'another post', 1],
[6, 103, 'third post', 1]
];
function mergeArray(array)
var o = array.reduce(function(init, each)
var ex = init[each[1]];
if (ex)
ex[2] += each[3];
else init[each[1]] = each.slice(1);
return init;
, );
return Object.values(o);
console.log('Result: ', mergeArray(array));
【讨论】:
以上是关于JavaScript:从数组中分组数据的主要内容,如果未能解决你的问题,请参考以下文章
mysql表中的javascript多维数组-不知道那种对象对象是啥