首页 > 解决方案 > 按值查找对象内部的项目并将它们分配给初始搜索值

问题描述

基本上我正在尝试匹配来自 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 .length- 数据中有一个模式)并将子项分配给父项。

寻找这样的东西:

{
    "item_sku": "BAG-WM-03",
    "children": "BAG-WM-03-YEL-UNI, BAG-WM-03-ROJ-UNI",
  }

PS这里是初学者,请温柔:)

标签: javascriptsortingecmascript-6filtermatch

解决方案


您可以通过以下步骤执行此操作:

  • 创建给定数组的深层副本,然后用于map()更改删除属性color_name并添加新属性children并将其设置为[]
  • 用于forEach()迭代数据副本。
  • 用于find()获取item_sku位于当前项的开头的对象item_sku。这将是父母。
  • 如果您发现父元素将元素推送到该父元素的子元素。
  • 最后filter()取出那些children不包含任何元素的对象。

const arr = [
  {
    "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",
  }
]

let clone = JSON.parse(JSON.stringify(arr)).map(x => ({item_sku:x.item_sku,children:[]}));

clone.forEach(a => {
  let parent = clone.find(x => a.item_sku.startsWith(x.item_sku) && a !== x);
  if(parent) parent.children.push(a.item_sku);
})

clone = clone.filter(x => x.children.length)
console.log(clone)


推荐阅读