KYJOne:[{deviceName:'zx',deviceName:'zx'}]有多个相同的deviceName,用v-for遍历只显示最后一个对象中的deviceName
时间: 2023-06-12 16:06:19 浏览: 117
Javascript 遍历对象中的子对象
可以考虑使用数组去重的方法,将相同的deviceName合并成一个对象,然后再进行遍历。下面是一种可能的实现方式:
```html
<template>
<ul>
<li v-for="device in uniqueDevices" :key="device.deviceId">{{ device.deviceName }}</li>
</ul>
</template>
<script>
export default {
data() {
return {
devices: [
{ deviceId: 1, deviceName: 'zx' },
{ deviceId: 2, deviceName: 'abc' },
{ deviceId: 3, deviceName: 'zx' },
{ deviceId: 4, deviceName: 'xyz' },
{ deviceId: 5, deviceName: 'zx' }
]
}
},
computed: {
uniqueDevices() {
const map = new Map()
this.devices.forEach(device => {
if (map.has(device.deviceName)) {
// 如果已经存在该deviceName,则合并deviceId
const existingDevice = map.get(device.deviceName)
existingDevice.deviceId = [existingDevice.deviceId, device.deviceId].flat()
} else {
// 如果不存在该deviceName,则添加到map中
map.set(device.deviceName, { deviceId: device.deviceId, deviceName: device.deviceName })
}
})
// 将map转换成数组返回
return Array.from(map.values())
}
}
}
</script>
```
这里使用了 ES6 中的 Map 数据结构来去重,遍历数组时,如果已经存在该 `deviceName`,则将当前对象的 `deviceId` 合并到已有的对象中,否则将当前对象添加到 Map 中。最后将 Map 转换成数组返回即可。
阅读全文