具有串联值的 objects 数组应移动到匹配值的 children
Array of objects with concatenated value should move to children of matching value
例如,我得到这个数组:
"items": [
{
"value": "10",
"label": "LIMEIRA",
"children": []
},
{
"value": "10-3",
"label": "RECEBIMENTO",
"children": []
},
{
"value": "10-3-4",
"label": "GAVETEIRO",
"children": []
},
{
"value": "10-3-4-A1",
"label": "A1",
"children": []
},
{
"value": "10-3-4-A1-N1",
"label": "N1",
"children": []
},
{
"value": "10-3-4-A1-N1-N2",
"label": "N2",
"children": []
},
{
"value": "10-4",
"label": "MEZANINO",
"children": []
},
{
"value": "10-4-4",
"label": "GAVETEIRO",
"children": []
},
{
"value": "10-4-4-B1",
"label": "B1",
"children": []
},
{
"value": "10-3-3",
"label": "PRATELEIRA",
"children": []
},
{
"value": "10-3-3-C1",
"label": "C1",
"children": []
},
{
"value": "10-3-3-C1-N1",
"label": "N1",
"children": []
},
{
"value": "11",
"label": "N & C BRASIL PROCESSAMENTO DE DADOS LTDA",
"children": []
},
{
"value": "11-4",
"label": "MEZANINO",
"children": []
},
{
"value": "11-4-4",
"label": "GAVETEIRO",
"children": []
},
{
"value": "11-4-4-A1",
"label": "A1",
"children": []
},
{
"value": "11-4-4-A1-N2",
"label": "N2",
"children": []
},
{
"value": "11-4-4-A1-N2-N2",
"label": "N2",
"children": []
},
{
"value": "10-4-4-A1",
"label": "A1",
"children": []
},
{
"value": "10-4-4-A1-N2",
"label": "N2",
"children": []
},
{
"value": "10-4-4-A1-N2-N2",
"label": "N2",
"children": []
},
{
"value": "11-4-4-A2",
"label": "A2",
"children": []
}
]
遍历我应该得到的每个值,例如:
{
"value": "10",
"label": "LIMEIRA",
"children": [
{
"value": "10-3",
"label": "RECEBIMENTO",
"children": [... it should go on]
}
]
}
我通过查找最新值尝试了 lodash 的一些东西,但没有成功,尝试将它们中的每一个都设置为“活动”并检查它是否与该值匹配并且具有 children,如果确实如此,再做一次,但仍然没有成功,我有什么想法可以做到吗?
您可以创建一个由所有项的 value
键控的映射,并建立父子关系,填充 children
属性 中少一个元素的项它的value
。由值 ""
键控的虚拟根对象可以这样收集根对象:
const items = [{"value": "10","label": "LIMEIRA","children": []},{"value": "10-3","label": "RECEBIMENTO","children": []},{"value": "10-3-4","label": "GAVETEIRO","children": []},{"value": "10-3-4-A1","label": "A1","children": []},{"value": "10-3-4-A1-N1","label": "N1","children": []},{"value": "10-3-4-A1-N1-N2","label": "N2","children": []},{"value": "10-4","label": "MEZANINO","children": []},{"value": "10-4-4","label": "GAVETEIRO","children": []},{"value": "10-4-4-B1","label": "B1","children": []},{"value": "10-3-3","label": "PRATELEIRA","children": []},{"value": "10-3-3-C1","label": "C1","children": []},{"value": "10-3-3-C1-N1","label": "N1","children": []},{"value": "11","label": "N & C BRASIL PROCESSAMENTO DE DADOS LTDA","children": []},{"value": "11-4","label": "MEZANINO","children": []},{"value": "11-4-4","label": "GAVETEIRO","children": []},{"value": "11-4-4-A1","label": "A1","children": []},{"value": "11-4-4-A1-N2","label": "N2","children": []},{"value": "11-4-4-A1-N2-N2","label": "N2","children": []},{"value": "10-4-4-A1","label": "A1","children": []},{"value": "10-4-4-A1-N2","label": "N2","children": []},{"value": "10-4-4-A1-N2-N2","label": "N2","children": []},{"value": "11-4-4-A2","label": "A2","children": []}];
const children = [];
const map = new Map(items.map(o => [o.value, o])).set("", { children });
for (const o of items) map.get(o.value.replace(/-?[^-]+$/, "")).children.push(o);
console.log(children);
例如,我得到这个数组:
"items": [
{
"value": "10",
"label": "LIMEIRA",
"children": []
},
{
"value": "10-3",
"label": "RECEBIMENTO",
"children": []
},
{
"value": "10-3-4",
"label": "GAVETEIRO",
"children": []
},
{
"value": "10-3-4-A1",
"label": "A1",
"children": []
},
{
"value": "10-3-4-A1-N1",
"label": "N1",
"children": []
},
{
"value": "10-3-4-A1-N1-N2",
"label": "N2",
"children": []
},
{
"value": "10-4",
"label": "MEZANINO",
"children": []
},
{
"value": "10-4-4",
"label": "GAVETEIRO",
"children": []
},
{
"value": "10-4-4-B1",
"label": "B1",
"children": []
},
{
"value": "10-3-3",
"label": "PRATELEIRA",
"children": []
},
{
"value": "10-3-3-C1",
"label": "C1",
"children": []
},
{
"value": "10-3-3-C1-N1",
"label": "N1",
"children": []
},
{
"value": "11",
"label": "N & C BRASIL PROCESSAMENTO DE DADOS LTDA",
"children": []
},
{
"value": "11-4",
"label": "MEZANINO",
"children": []
},
{
"value": "11-4-4",
"label": "GAVETEIRO",
"children": []
},
{
"value": "11-4-4-A1",
"label": "A1",
"children": []
},
{
"value": "11-4-4-A1-N2",
"label": "N2",
"children": []
},
{
"value": "11-4-4-A1-N2-N2",
"label": "N2",
"children": []
},
{
"value": "10-4-4-A1",
"label": "A1",
"children": []
},
{
"value": "10-4-4-A1-N2",
"label": "N2",
"children": []
},
{
"value": "10-4-4-A1-N2-N2",
"label": "N2",
"children": []
},
{
"value": "11-4-4-A2",
"label": "A2",
"children": []
}
]
遍历我应该得到的每个值,例如:
{
"value": "10",
"label": "LIMEIRA",
"children": [
{
"value": "10-3",
"label": "RECEBIMENTO",
"children": [... it should go on]
}
]
}
我通过查找最新值尝试了 lodash 的一些东西,但没有成功,尝试将它们中的每一个都设置为“活动”并检查它是否与该值匹配并且具有 children,如果确实如此,再做一次,但仍然没有成功,我有什么想法可以做到吗?
您可以创建一个由所有项的 value
键控的映射,并建立父子关系,填充 children
属性 中少一个元素的项它的value
。由值 ""
键控的虚拟根对象可以这样收集根对象:
const items = [{"value": "10","label": "LIMEIRA","children": []},{"value": "10-3","label": "RECEBIMENTO","children": []},{"value": "10-3-4","label": "GAVETEIRO","children": []},{"value": "10-3-4-A1","label": "A1","children": []},{"value": "10-3-4-A1-N1","label": "N1","children": []},{"value": "10-3-4-A1-N1-N2","label": "N2","children": []},{"value": "10-4","label": "MEZANINO","children": []},{"value": "10-4-4","label": "GAVETEIRO","children": []},{"value": "10-4-4-B1","label": "B1","children": []},{"value": "10-3-3","label": "PRATELEIRA","children": []},{"value": "10-3-3-C1","label": "C1","children": []},{"value": "10-3-3-C1-N1","label": "N1","children": []},{"value": "11","label": "N & C BRASIL PROCESSAMENTO DE DADOS LTDA","children": []},{"value": "11-4","label": "MEZANINO","children": []},{"value": "11-4-4","label": "GAVETEIRO","children": []},{"value": "11-4-4-A1","label": "A1","children": []},{"value": "11-4-4-A1-N2","label": "N2","children": []},{"value": "11-4-4-A1-N2-N2","label": "N2","children": []},{"value": "10-4-4-A1","label": "A1","children": []},{"value": "10-4-4-A1-N2","label": "N2","children": []},{"value": "10-4-4-A1-N2-N2","label": "N2","children": []},{"value": "11-4-4-A2","label": "A2","children": []}];
const children = [];
const map = new Map(items.map(o => [o.value, o])).set("", { children });
for (const o of items) map.get(o.value.replace(/-?[^-]+$/, "")).children.push(o);
console.log(children);