gpt4 book ai didi

javascript - 在包含多数组的对象中进行分组、排序、合并

转载 作者:太空宇宙 更新时间:2023-11-03 21:14:56 25 4
gpt4 key购买 nike

我有一个包含 2 个数组的对象,我想通过 JavaScript 处理它们

original object

或者

{Array1: Array(11), Array2: Array(11)}

Array1:(11) ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'A', 'F', 'C', 'E']

Array2:(11) ['5', '7', '4', '3', '8', '1', '9', '1', '5', '4', '2']

我的问题是:

如何像这样对该对象进行分组和排序

after group and sort

然后按值获取前 3 行,其余行合并为 1 行,如下所示:

final result

我对 python 与 SQL 结合做了同样的事情,但不知道如何仅使用 JavaScript 来做同样的事情,这就是我所做的:

将数据添加到已在 SQL 中分组和排序的数据框中

df1 = collection_condition(Grouped table)

创建新数据框 - df2 - 其中包含 df1 中的前 3 个数据

df2 = df1.iloc[3:]

创建新数据框 - df3 - 其中包含 df1 的其余部分

df3 = df1.iloc[:3]

然后计算df3的总和

rest_total = df3["Array2"].sum()

然后向 df2 添加新行

df2.loc[-1] = ["Others", rest_total]
df2.index = df2.index + 1
df2 = df2.sort_index()

我的计划是:

  1. 尝试按该对象进行分组(可选 - 您不需要回答这个问题,因为我可以设法拥有一个分组对象,但任何解决方案都可以)
  2. 必须对该对象进行排序,以便我可以像使用 python 那样剪切它,或者任何建议也很好。

谢谢

最佳答案

您可以转置数据、对其进行分组、排序并获取前三个值以及其他值的总和,再次转置并分配回对象。

const
transpose = (r, a) => a.map((v, i) => [...(r[i] || []), v]),
group = (r, a) => {
var temp = r.find(v => v[1] === +a[1]);
if (!temp) {
r.push([a[0], +a[1]]);
} else {
temp[1] += +a[1];
}
return r;
}

var data = { Array1: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'A', 'F', 'C', 'E'], Array2: ['5', '7', '4', '3', '8', '1', '9', '1', '5', '4', '2'] },
temp = Object
.values(data)
.reduce(transpose, [])
.reduce(group, [])
.sort(({ 1: a }, { 1: b }) => b - a)
.reduce((r, a, i) => r.concat([i < 4 ? a : ['OTHERS', r.pop()[1] + a[1]]]), [])
.reduce(transpose, []);

[data.Array1, data.Array2] = temp;

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在包含多数组的对象中进行分组、排序、合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54783801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com