如何将与 parent 相同的 id 应用于同一级别的 children 数组?
How to apply same id as parent to children array in the same level?
我有以下object
[
{ name: "parent", id: 1 },
{ name: "children", id: 2 },
{ name: "children", id: 3 },
{ name: "parent", id: 4 },
{ name: "children", id: 5 }
]
如您所见,parent和children都处于同一水平。我需要做的是将 children 与 parent 连接起来,将 parent id 应用到具有新属性的 children 数组。像这样:
[
{ name: "parent", id: 1 },
{ name: "children", id: 2, parentId: 1 },
{ name: "children", id: 3, parentId: 1 },
{ name: "parent", id: 4 },
{ name: "children", id: 5, parentId: 4 },
{ name: "children", id: 6, parentId: 4 }
]
到目前为止,我还没有能够实现这个问题的逻辑。对此问题的任何帮助将不胜感激。
提前致谢!
您需要遍历数组并存储最后一次遇到的父 ID,以便能够将其应用于每个后续子项
const data = [
{ name: "parent", id: 1 },
{ name: "children", id: 2 },
{ name: "children", id: 3 },
{ name: "parent", id: 4 },
{ name: "children", id: 5 }
]
let lastParentId = null
data.forEach(el => {
if (el.name === "parent") {
lastParentId = el.id
} else {
el.parentId = lastParentId
}
})
console.log(data)
这是一个使用地图的可重用解决方案:
const data = [{ name: "parent", id: 1 }, { name: "children", id: 2 }, { name: "children", id: 3 }, { name: "parent", id: 4 }, { name: "children", id: 5 }]
function map(data) {
let lastId
return data.map(e => {
if (e.name === "parent") lastId = e.id
if (e.name === "children") e.parentId = lastId
return e
})
}
console.info(map(data))
迭代 array
,存储 name
项的 parent id
等于 parent
,设置 parent id
的子项 属性
const test = [
{ name: "parent", id: 1 },
{ name: "children", id: 2 },
{ name: "children", id: 3 },
{ name: "parent", id: 4 },
{ name: "children", id: 5 }
];
let parentId = null;
for(let i = 0; i < test.length; i++){
if(test[i].name === "parent") {
parentId = test[i].id;
} else {
test[i].parentid = parentId;
}
}
console.log(test);
您可以存储来自最后一个父对象的 parentId
并映射具有该属性或不具有该属性的对象的新对象。
const
data = [{ name: "parent", id: 1 }, { name: "children", id: 2 }, { name: "children", id: 3 }, { name: "parent", id: 4 }, { name: "children", id: 5 }],
result = data.map((parentId => o => {
if (o.name === 'parent') {
parentId = o.id;
return o;
}
return { ...o, parentId };
})());
console.log(result);
您可以使用 Array.map
遍历数据并检查对象中的 name
是否为 parent
如果是,则将 id 存储在变量中 return同一个对象。否则,将存储到对象的 id 添加为 parentId
let data = [{name:"parent",id:1},{name:"children",id:2},{name:"children",id:3},{name:"parent",id:4},{name:"children",id:5}]
const processData = (data) => {
let parentId = "";
return data.map(d => {
if(d.name === "parent") {
parentId = d.id;
} else {
d.parentId = parentId
}
return d;
})
}
console.log(processData(data))
.as-console-wrapper {
max-height: 100% !important;
}
我有以下object
[
{ name: "parent", id: 1 },
{ name: "children", id: 2 },
{ name: "children", id: 3 },
{ name: "parent", id: 4 },
{ name: "children", id: 5 }
]
如您所见,parent和children都处于同一水平。我需要做的是将 children 与 parent 连接起来,将 parent id 应用到具有新属性的 children 数组。像这样:
[
{ name: "parent", id: 1 },
{ name: "children", id: 2, parentId: 1 },
{ name: "children", id: 3, parentId: 1 },
{ name: "parent", id: 4 },
{ name: "children", id: 5, parentId: 4 },
{ name: "children", id: 6, parentId: 4 }
]
到目前为止,我还没有能够实现这个问题的逻辑。对此问题的任何帮助将不胜感激。
提前致谢!
您需要遍历数组并存储最后一次遇到的父 ID,以便能够将其应用于每个后续子项
const data = [
{ name: "parent", id: 1 },
{ name: "children", id: 2 },
{ name: "children", id: 3 },
{ name: "parent", id: 4 },
{ name: "children", id: 5 }
]
let lastParentId = null
data.forEach(el => {
if (el.name === "parent") {
lastParentId = el.id
} else {
el.parentId = lastParentId
}
})
console.log(data)
这是一个使用地图的可重用解决方案:
const data = [{ name: "parent", id: 1 }, { name: "children", id: 2 }, { name: "children", id: 3 }, { name: "parent", id: 4 }, { name: "children", id: 5 }]
function map(data) {
let lastId
return data.map(e => {
if (e.name === "parent") lastId = e.id
if (e.name === "children") e.parentId = lastId
return e
})
}
console.info(map(data))
迭代 array
,存储 name
项的 parent id
等于 parent
,设置 parent id
的子项 属性
const test = [
{ name: "parent", id: 1 },
{ name: "children", id: 2 },
{ name: "children", id: 3 },
{ name: "parent", id: 4 },
{ name: "children", id: 5 }
];
let parentId = null;
for(let i = 0; i < test.length; i++){
if(test[i].name === "parent") {
parentId = test[i].id;
} else {
test[i].parentid = parentId;
}
}
console.log(test);
您可以存储来自最后一个父对象的 parentId
并映射具有该属性或不具有该属性的对象的新对象。
const
data = [{ name: "parent", id: 1 }, { name: "children", id: 2 }, { name: "children", id: 3 }, { name: "parent", id: 4 }, { name: "children", id: 5 }],
result = data.map((parentId => o => {
if (o.name === 'parent') {
parentId = o.id;
return o;
}
return { ...o, parentId };
})());
console.log(result);
您可以使用 Array.map
遍历数据并检查对象中的 name
是否为 parent
如果是,则将 id 存储在变量中 return同一个对象。否则,将存储到对象的 id 添加为 parentId
let data = [{name:"parent",id:1},{name:"children",id:2},{name:"children",id:3},{name:"parent",id:4},{name:"children",id:5}]
const processData = (data) => {
let parentId = "";
return data.map(d => {
if(d.name === "parent") {
parentId = d.id;
} else {
d.parentId = parentId
}
return d;
})
}
console.log(processData(data))
.as-console-wrapper {
max-height: 100% !important;
}