如何通过固定条件/规则在嵌套数组结构中合并和计算数组项



我有一个JavaScript异构数组,它看起来像:

let bigArray = [["A", "B", 221.67],["C", "B", 221.65],["B", "D", 183.33],["B", "A", 4900],["E", "B", 150],["A", "B", 150]]现在我想加第三个元素(数字(,如果第一个和第二个元素与下一个数组(在多维数组中(的第一个和第一个元素匹配,那么加两个数组的第三个(数字(&如果发现这些元素的反向匹配,也执行减号运算。

输出为:

let ans = [["B", "A", 4528.33],["C", "B", 221.65],["B", "D", 183.33],["E", "B", 150]]

子阵列["B","A",4528.33]是通过执行负运算形成的,即4900-221.67-150

在bigArray中,存在具有重复的元素对的数组;A""B";(在单个子阵列中(。因此,对于所有匹配的子阵列执行求和运算&如果找到匹配子数组的相反,则执行减法运算。i、 e=>4900-221.67-150

我尝试了很多方法,但无法在所有情况下都达到所需的输出。任何帮助都将不胜感激,谢谢

您可以使用排序键进行分组,以维护标准键,并检查零件键的顺序是否相同,然后添加值或减去值。

如果某个值为负值,则更改关键点并取正值。

let data = [["A", "B", 221.67], ["C", "B", 221.65], ["B", "D", 183.33], ["B", "A", 4900], ["E", "B", 150], ["A", "B", 150]],
result = Object.values(data.reduce((r, [a, b, v]) => {
const key = [a, b].sort().join('|');
if (r[key]) {
r[key][2] += a === r[key][0] ? v : -v;
if (r[key][2] < 0) r[key] = [r[key][1], r[key][0], -r[key][2]];
} else {
r[key] = [a, b, v];
}
return r;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

最新更新