项目中的数据是一个对象中,每个元素又都是一个对象数组,而在使用上我们只用到每个元素中对象数组上的第一项,所以我把每个元素对象数组中的第一项都提取出来变成一个新的数组。
提取出来的数据以下面为示例:
const deviceArray = [
{ deviceName: 'A1', zhu: '1-1' },
{ deviceName: 'A2', zhu: '1-2' },
{ deviceName: 'A3', zhu: '1-1000' },
{ deviceName: 'A4', zhu: '2-1' },
{ deviceName: 'A5', zhu: '2-2' },
{ deviceName: 'A6', zhu: '2-1000' },
{ deviceName: 'A7', zhu: '3-1' },
{ deviceName: 'A8', zhu: '3-2' },
{ deviceName: 'A9', zhu: '3-1000' },
];
需求转化一下,就是我们要遍历这个数组,遇到zhu字段包含-1000就为一个组的末尾,其与其前面设备的名称都需要改为这一组第一台设备和最后一台设备。
function addFirstAndLastDeviceName(devices) {
let startIndex =0
devices.map((device, index) => {
if (device.zhu.includes('-1000')) {
let firstDevice = devices[startIndex]
let lastDevice = devices[index]
// 对于包含-1000的设备,找到它前面的所有设备,
for (let i = startIndex; i <= index; i++) {
devices[i]={
...devices[i],
firstDeviceName: firstDevice.deviceName ,
lastDeviceName: lastDevice.deviceName ,
}
}
// 更新startIndex为包含'-1000'的项的索引加1
startIndex =index +1
}
});
return devices
}
首先我们要有一个startIndex用来记录每一组的起始位置,用map方法遍历数组,传入设备和下标,当遇到设备中zhu字段包含-1000,为最后一组时,记录这一组设备第一个设备和最后一个设备,firstDevice和lastDevice,然后使用扩展运算符给这一组设备新增firstDeviceName和lastDeviceName值为firstDevice和lastDevice,随后更新startIndex索引为index+1,循环便能达到效果。