我有一个对象数组,里面有一个对象数组(里面还有另一个)。
const array = [
{
id: 1,
prod: [
{
id: 1,
op: [
{
id: 1
},
{
id: 2
}
]
},
{
id: 2,
op: [
{
id: 1
}
]
}
]
},
{
id: 2,
prod: [
{
id: 1,
op: [
{
id: 1
},
{
id: 2
}
]
},
{
id: 2,
op: [
{
id: 1
}
]
}
]
}
];
问题是如何在每个键值中输入一个新的键值,使其看起来像这样:
[
{
id: 1,
isChecked: false,
prod: [
{
id: 1,
isChecked: false,
op: [
{
id: 1,
isChecked: false
},
{
id: 2,
isChecked: false
}
]
},
{
id: 2,
isChecked: false,
op: [
{
id: 1,
isChecked: false
}
]
}
]
},
{
id: 2,
isChecked: false,
prod: [
{
id: 1,
isChecked: false,
op: [
{
id: 1,
isChecked: false
},
{
id: 2,
isChecked: false
}
]
},
{
id: 2,
isChecked: false,
op: [
{
id: 1,
isChecked: false
}
]
}
]
}
];
我知道迭代是可以实现的
array.map(object => {
return {
...object,
isChecked: false
}
})
但是有更好的方法吗? 以某种方式所有对象都具有该键/值而无需多次迭代
const addCheck = arr => arr.map(({id, ...item}) => {
const arrays = Object.entries(item).filter(([_, val]) => Array.isArray(val)).map(([key, val]) => [key, addCheck(val)]);
return Object.assign({id, isChecked: false}, item, Object.fromEntries(arrays));
});
const result = addCheck(array);
console.log(result);
<script>
const array = [
{
id: 1,
prod: [
{
id: 1,
op: [
{
id: 1
},
{
id: 2
}
]
},
{
id: 2,
op: [
{
id: 1
}
]
}
]
},
{
id: 2,
prod: [
{
id: 1,
op: [
{
id: 1
},
{
id: 2
}
]
},
{
id: 2,
op: [
{
id: 1
}
]
}
]
}
];
</script>