vue+elementui对象数组去重合并,value值累加,展示为字符串
<span v-if="bags.length>0"`>选中合计:{{selectCompositionTotal}}</span>
export default {
data(){
retun{
bags:[{
bloodSubclasses:"12345",
bloodSubclassesStr:"aaa",
spec:"5",
unit:"ml"
},
bloodSubclasses:"1234",
bloodSubclassesStr:"bbb",
spec:"5",
unit:"ml"
},
bloodSubclasses:"12345",
bloodSubclassesStr:"aaa",
spec:"6",
unit:"ml"
},
bloodSubclasses:"1234",
bloodSubclassesStr:"aaa",
spec:"2",
unit:"ml"
}]
}},
computed: {
selectCompositionTotal () {
return this.getTotalSelectComposition()
}
},
methods:{
getTotalSelectComposition(){
let arr = [];
let arrStr = [];
arr.push(this.bags[0].bloodSubclasses);
arrStr.push(this.bags[0].bloodSubclassesStr);
this.bags.forEach((item, i) => {
if (i > 0) {
if (arr.toString().includes(item.bloodSubclasses)) {
} else {
arr.push(item.bloodSubclasses);
arrStr.push(item.bloodSubclassesStr);
}
}
});
let obj = {};
arrStr.forEach(item => {
obj[item] = "";
});
this.bags.forEach(item => {
arr.forEach((subItem, i) => {
if (item.bloodSubclasses == subItem) {
if (!obj[arrStr[i]]) {
obj[arrStr[i]] = item.spec + item.unit;
} else {
obj[arrStr[i]] = Number(obj[arrStr[i]].replace(/[^\d.]/g, '')) + Number(item.spec) + item.unit;
}
}
});
});
let str = "";
Object.getOwnPropertyNames(obj).forEach((key) => {
if (!str) {
str = str + key + ":" + obj[key]
} else {
str = str + "," + key + ":" + obj[key]
}
});
return str;
}
}
}