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

Javascript 如何通过固定条件/规则在嵌套数组结构中合并和计算数组项,javascript,arrays,data-structures,merge,reduce,Javascript,Arrays,Data Structures,Merge,Reduce,我有一个JavaScript异构数组,看起来像: 让bigArray=[[“A”,“B”,221.67],“C”,“B”,221.65],“B”,“D”,183.33],“B”,“A”,4900],“E”,“B”,150],“A”,“B”,150] 现在我想添加第三个元素(数字),如果第一个和第二个元素与下一个数组(多维数组)的第一个和第二个元素匹配,那么添加这两个数组的第三个元素(数字)&如果发现这些元素的反向匹配,那么还要执行减号操作 输出将是: 让ans=[[B”,“A”,4528.33]

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

让bigArray=[[“A”,“B”,221.67],“C”,“B”,221.65],“B”,“D”,183.33],“B”,“A”,4900],“E”,“B”,150],“A”,“B”,150]
现在我想添加第三个元素(数字),如果第一个和第二个元素与下一个数组(多维数组)的第一个和第二个元素匹配,那么添加这两个数组的第三个元素(数字)&如果发现这些元素的反向匹配,那么还要执行减号操作

输出将是:

让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],
结果=对象值(数据减少((r[a,b,v])=>{
常量键=[a,b].sort().join(“|”);
if(r[键]){
r[键][2]+=a===r[键][0]?v:-v;
如果(r[key][2]<0)r[key]=[r[key][1],r[key][0],-r[key][2];
}否则{
r[键]=[a,b,v];
}
返回r;
}, {}));
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
所以不是免费的代码服务。请至少包括您为解决此问题所做的尝试。如果加或减一个值,符合什么条件?前两个值的顺序?@NinaScholz我试图模拟splitwise/kitty split,因此对于两个用户之间的更多交易,我希望添加他们的金额,如果匹配的反向是,则执行减号操作found@Shivashankar尼娜想说的是,“AB”和“BA”->“AB”首先在数组中找到,所以根据你的解释,“BA”将是负运算,将导致221.67-4900,毕竟是负结果。但您的输出期望4528.33为正。什么使4528.33在此为正,而不是-4528。33@MoxxiManagarm假设考虑任何组合,如果“BA”的结果是否定的,那么我们需要改变顺序(反向)并将其存储为“AB”,结果是肯定的。这意味着对于执行此操作时遇到的每个负值,我们需要颠倒顺序并将金额(数字)存储为正值。