问题描述
let bigArray = [["A","B",221.67],["C",221.65],["B","D",183.33],"A",4900],["E",150],["A",150]]
现在我想添加第三个元素(数字),如果第一个和第二个元素与下一个数组(在多维数组中)的第一个和第二个元素匹配,然后添加两个数组的第三个元素(数字),并且如果反向则执行减号运算找到了那些匹配的元素。
输出将是:
let ans = [["B",4528.33],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",221.65],["B","D",183.33],"A",4900],["E",150],["A",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,v];
}
return r;
},{}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }