Javascript 连接重复项目并添加数量
我正在处理Javascript 连接重复项目并添加数量,javascript,jquery,html,Javascript,Jquery,Html,我正在处理标记中包含的两位文本。一个包含项目,另一个包含数量。但是,有时我有多个相同但数量不同的项目,因此我不能只计算字符串的出现次数(我从使用此方法开始,发现它仅在数量为1时有效) 这是我正在使用的代码: var joinArr=$('#rechighlight').html()//获取收到的项目 var qtyArr=$('#qtyArray').html()//获取接收数量 var createArr=joinArr.trim().split(“”)//按br标记拆分 var creat
标记中包含的两位文本。一个包含项目,另一个包含数量。但是,有时我有多个相同但数量不同的项目,因此我不能只计算字符串的出现次数(我从使用此方法开始,发现它仅在数量为1时有效)
这是我正在使用的代码:
var joinArr=$('#rechighlight').html()//获取收到的项目
var qtyArr=$('#qtyArray').html()//获取接收数量
var createArr=joinArr.trim().split(“
”)//按br标记拆分
var createArrQty=qtyArr.trim().split(“
”)//按br标记拆分
var resultingArr=[createArr,createArrQty]//按正确顺序创建数组
.reduce((r,a)=>(a.forEach((a,i)=>(r[i]=r[i]| |[])。push(a)),r),[]))
.减少((a,b)=>a.concat(b));
var stringArr=JSON.stringify(resultingArr)//严格化结果
document.getElementById(“finArray”).innerHTML=stringArr//将结果添加到新div中
项目
数量
AAA
BBB
CCC
5
3
2
收到的物品
收到数量
AAA
BBB
AAA
CCC
CCC
3
3
2
1
1
我的输出
预期产量
[“AAA”、“5”、“BBB”、“3”、“CCC”、“2”、“1”、“3”]
您的reduce函数只需按以下方式构造即可:
var occurrences = createArr.reduce(function(obj, item, index) {
obj[item] = Number(obj[item] || 0) + Number(createArrQty[index]);
return obj;
}, {});
用键减少第一个数组,并用数量求和。
尽管您需要从每个数组中删除最后一项,因为它是.split
函数中的空值
两个都做一个pop()。
代码如下
var joinArr=$('#rechighlight').html()//获取收到的项目
var qtyArr=$('#qtyArray').html()//获取接收数量
var createArr=joinArr.trim().split(“
”)//按br标记拆分
var createArrQty=qtyArr.trim().split(“
”)//按br标记拆分
createArr.pop();
createArrQty.pop();
变量发生率=createArr.reduce(函数(对象、项目、索引){
对象[项目]=编号(对象[项目]| | 0)+编号(数量[索引]);
返回obj;
}, {});
var stringArr=JSON.stringify(出现)//严格化结果
document.getElementById(“finArray”).innerHTML=stringArr//将结果添加到新div中
项目
数量
AAA
BBB
CCC
5
3
2
收到的物品
收到数量
AAA
BBB
AAA
CCC
CCC
3
3
2
1
1
我的输出
预期产量
[“AAA”、“5”、“BBB”、“3”、“CCC”、“2”、“1”、“3”]
HTML和对象结构是最终的吗?我建议您最好使用带有实际行和单元格的表中的值,而不是用div
填充单行并按换行符拆分。类似地,作为对象数组而不是平面数组,结果会更有意义。一旦数据到达我可以编辑的位置,它就会被格式化为这个设置。我在与你上面所做的一个变体混在一起,并且意识到我在看你的数据时犯了一个错误(这就是为什么我的错误)。同时感谢您添加.pop
!