Javascript 按值查找对象内部的项,并将其指定给初始搜索值
基本上,我试图匹配JSON中的值,它们具有父子关系 数组:Javascript 按值查找对象内部的项,并将其指定给初始搜索值,javascript,sorting,ecmascript-6,filter,match,Javascript,Sorting,Ecmascript 6,Filter,Match,基本上,我试图匹配JSON中的值,它们具有父子关系 数组: { "item_sku": "BAG-WM-03", "color_name": "", }, { "item_sku": "BAG-WM-03-YEL-UNI", "color_name": "Amarillo", } { "item_sku": "BAG-WM-03-ROJ-UNI", "color_name": "Rojo", } 我需要获取父项(基于sku.l
{
"item_sku": "BAG-WM-03",
"color_name": "",
},
{
"item_sku": "BAG-WM-03-YEL-UNI",
"color_name": "Amarillo",
}
{
"item_sku": "BAG-WM-03-ROJ-UNI",
"color_name": "Rojo",
}
我需要获取父项(基于sku.length
-数据中有一个模式)并将子项分配给父项
寻找这样的东西:
{
"item_sku": "BAG-WM-03",
"children": "BAG-WM-03-YEL-UNI, BAG-WM-03-ROJ-UNI",
}
请注意,这里的初学者,请温柔:)您可以通过以下步骤完成:
- 创建给定数组的深度副本,然后使用
更改删除属性map()
,添加新属性color\u name
子属性
,并将其设置为
[]
- 使用
迭代数据副本forEach()
- 使用
获取其find()
位于当前项的item\u sku
开头的对象。这将是家长item\u sku
- 如果找到父元素,则将元素推送到该父元素的子元素
- 在末尾,
将那些filter()
不包含任何元素的对象输出子对象
const arr=[
{
“项目库存单位”:“BAG-WM-03”,
“颜色名称”:“,
},
{
“项目sku”:“BAG-WM-03-YEL-UNI”,
“颜色名称”:“Amarillo”,
},
{
“项目sku”:“BAG-WM-03-ROJ-UNI”,
“颜色名称”:“Rojo”,
}
]
让clone=JSON.parse(JSON.stringify(arr)).map(x=>({item_sku:x.item_sku,children:[]);
clone.forEach(a=>{
让parent=clone.find(x=>a.item\u sku.startsWith(x.item\u sku)&&a!==x);
如果(父项)父项、子项、推送(a.item\u sku);
})
clone=clone.filter(x=>x.children.length)
console.log(克隆)
基础知识
种一棵树!
假设只有字符串作为键,并且该字符串通过包含节点本身的起始字符串来包含它们自己的关系
然后假设得到这个字符串的有序数组,并查看给定的值,如
a
ab
abc
bb
bba
bbab
然后迭代排序后的数组,取这个字符串并向后走,直到找到一个字符串,它是以开头的实际字符串。将其作为父对象,并将实际字符串及其生成的对象指定为子对象
如果未找到父项,则将空字符串作为父项
结果返回虚拟父级的子级,并将空字符串作为根节点
函数getTree(数组){
var o={};
array.forEach((k,i,a)=>{
o[k]=o[k]|{id:k};
而(i--&&!k.startsWith(a[i]);
var parent=a[i]| |“”;
o[parent]=o[parent]|{id:parent};
o[parent]。children=o[parent]。children | |[];
o[parent].children.push(o[k]);
});
返回o[“”]。子对象;
}
var数据=['a','bb','ab','abc','bba','bbab'],
tree=getTree(data.sort());
控制台日志(树)代码>
作为控制台包装{max height:100%!important;top:0;}
什么是“模式”?数组是否可以有BAG-WM-03-
前缀以外的任何内容?数组是否已排序?请创建一个您正在使用的工作示例。我不理解这种关系。@adiga是的,有,项目已经指定了父项和子项relashiopnship,但我想在这种情况下使用主值('sku')使其正常工作。什么被认为是父项
项目:是具有项目\u sku.length==9的项目吗?或者项目\u sku
中只有两个-
?是否根据父项进行分类(例如:一旦出现另一个父项BAG-WM-04
,将不再有带有BAG-WM-03
)谢谢您的回答,但每次的sku.length
可能不同。抱歉,在此之前未提及此问题。除非未定义,否则sku.length不会影响解决方案。我仅将该阵列作为样本。:)
a
ab
abc
bb
bba
bbab