gpt4 book ai didi

javascript - 将唯一 id 添加到深层嵌套对象数组的最有效方法

转载 作者:行者123 更新时间:2023-11-28 03:14:59 26 4
gpt4 key购买 nike

我需要将 id 添加到对象数组中:示例:

const workouts = [
{
type: "walk"
areas: [
{
location: 'park'
day: 'Sunday'
},
{
location: 'beach'
day: 'Monday'
}
],
exercise: true
},
{
type: "run"
areas: [
{
location: 'gym'
day: 'Saturday'
},
{
location: 'track'
day: 'Sunday'
}
],
exercise: true
}
]

在此示例中,我需要将 id 添加到 workouts 数组和深度嵌套的 areas 数组中。我想出了这个通过每个数组映射的解决方案:

const idMappings = workouts.map((workout) => {
const workoutIdMapping = workout.id ? workout : { ...workout, id: uuid.v4() }; // if there is already an id just return the object -- otherwise generate a random id
const areasIdMapping = workoutIdMapping.areas.map((area) => {
return area.id ? area : { ...area, id: uuid.v4() }; // if there is already an id just return the object -- otherwise generate a random id
});
return { ...workoutIdMapping, areas: areasIdMapping }; // finally return the updated values with ids
});

这会正确地向我返回以下带有 id 的区域:

const workouts = [
{
id: "0000-0000-4e6b-9f24-f8e1f2402a9b"
type: "walk"
areas: [
{
id: "0000-1111-4e6b-9f24-f8e1f2402a9b"
location: 'park'
day: 'Sunday'
},
{
id: "0000-2222-4e6b-9f24-f8e1f2402a9b"
location: 'beach'
day: 'Monday'
}
],
exercise: true
},
{
id: "1111-0000-4e6b-9f24-f8e1f2402a9b"
type: "run"
areas: [
{
id: "1111-1111-4e6b-9f24-f8e1f2402a9b"
location: 'gym'
day: 'Saturday'
},
{
id: "1111-2222-4e6b-9f24-f8e1f2402a9b"
location: 'track'
day: 'Sunday'
}
],
exercise: true
}
]

这个算法工作正常,但是有没有更有效的方法来解决这个问题 - 多次映射不是解决这个问题的有效方法 - 也许我可以使用更好的 ES6 函数?

最佳答案

也许你可以在这里使用递归。像这样:

function setIds (arr) {
arr.forEach(item => {
item.id = uuid.v4()
if (item.areas && item.areas.length > 0) {
setIds(item.areas)
}
})
}

setIds(workouts)

关于javascript - 将唯一 id 添加到深层嵌套对象数组的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59722945/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com