现有如下两个数组,分别是从后台不同接口中取到的,需要将两个对象数组比较,将第二个数组中promotionType值等于第一个数组中Key的对应的promotionCount值写入到第一个数组中,键名为count
tempSales = [{
key:'1',
value:'拼团'
},{
key:'2',
value:'秒杀'
},{
key:'3',
value:'满减'
},{
key:'4',
value:'满送'
}],
ruleRecordCount = [{
promotionType:'1',
promotionCount:235
},{
promotionType:'2',
promotionCount:21
},{
promotionType:'3',
promotionCount:784
},{
promotionType:'4',
promotionCount:1645
},]
方法一:
for(let item1 of tempSales) {
let _index=ruleRecordCount.findIndex(c=>c.promotionType==item1.key)
if(_index>-1){
item1.count = ruleRecordCount[_index].promotionCount;
}
}
this.saleTypes=tempSales //这是最终需要挂载到页面上的值
方法二:
for(let item1 of tempSales) {
for(let item2 of ruleRecordCount) {
if(item1.key == item2.promotionType) {
item1.count = item2.promotionCount;
}
}
}
this.saleTypes=tempSales //这是最终需要挂载到页面上的值
注意:在vue中尽量不要使用方法二,因为在 for of循环时除了需要枚举对比原有属性,还有可能会循环底层属性,这样当数据比较庞大时容易导致页面卡顿,且代码复杂时由于{}太多不好阅读。
在所有循环结束之后,再给需要挂载到页面上的dom统一赋值很重要,因为如果this.saleType参与遍历,vue就需要给每一次遍历的时候分别通过set方法追加跟踪器,而这个跟踪器需要在下次调用时生效,容易在页面第一次初始化时显示undefined。当数据结构构造好之后统一赋值就不会出现这个问题。
二、
现有两个数组如下,需要将list中对应的key转换成saleTypes中对应key的value值,变成‘砍价,秒杀’这种形式
list:['1','2'],
saleTypes:[{
key:'1',
value:'砍价'
},{
key:'2',
value:'抢购'
}]
etActiveName(list) {
let activeNames = []
this.saleTypes.forEach(b => {
if (list.indexOf(b.key) > -1) {
activeNames.push(b.value)
}
})
return activeNames.join(',')
},