如何通过固定 condition/rule 合并和计算嵌套数组结构中的数组项
How does one merge and compute array items within a nested array structure via a fixed condition/rule
我有一个 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”(在单个子数组中)。因此,对于所有匹配的子数组执行求和运算,如果找到匹配子数组的反向则执行减运算。我,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; }
我有一个 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”(在单个子数组中)。因此,对于所有匹配的子数组执行求和运算,如果找到匹配子数组的反向则执行减运算。我,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; }