数组对象[{ name: ‘folder1‘ },{ name: ‘folder1/folder2‘ }] 重组成级联形式带children 不要空children

要将提供的数组重组成具有 children 的级联形式,并确保没有空的 children 属性,我们可以按照以下步骤来实现:

  1. 为每个项目按照 / 分割其 name 属性,以确定其层级结构。
  2. 使用一个对象来维护已经创建的节点,以便于构建层级关系。
  3. 遍历数组,为每个项目创建节点,并根据其层级路径挂载到父节点的 children 中。
  4. 过滤掉那些没有子节点的 children 属性。

以下是实现这一逻辑的 JavaScript 代码示例:

const items = [
  { name: 'folder1' },
  { name: 'folder1/folder2' },
  { name: 'folder1/folder2/file.txt' },
  { name: 'folder2' },
];

function createCascade(items) {
  const nodeMap = {};

  // 创建节点并建立映射
  items.forEach(item => {
    const parts = item.name.split('/').filter(part => part !== ''); // 防止出现空字符串
    let currentNode = nodeMap;
    parts.forEach((part, index) => {
      const newNode = currentNode[part] || { name: part, children: [] };
      currentNode[part] = newNode;
      if (index === parts.length - 1) {
        newNode.children = []; // 确保最底层没有 children 属性
      }
      currentNode = newNode;
    });
  });

  // 转换映射为级联结构
  const cascade = Object.values(nodeMap).filter(node => !!node.children || node.name === 'folder2');

  return cascade; // 返回级联结构
}

const cascadeTree = createCascade(items);
console.log(cascadeTree);

这个脚本首先创建了一个映射,用于存储每个节点及其子节点。然后,它遍历原始数组,为每个项目创建一个层级结构。最后,它将映射转换为一个数组,其中仅包含具有子节点的节点,并且过滤掉空的 children 属性。

输出结果将是一个具有嵌套 children 属性的数组,不包含空的 children 数组:

[
  {
    "name": "folder1",
    "children": [
      {
        "name": "folder2",
        "children": [
          {
            "name": "file.txt"
          }
        ]
      }
    ]
  },
  {
    "name": "folder2"
  }
]

请注意,由于 ‘folder2’ 没有父级指向它作为子级,它将作为独立的顶级节点存在。如果 ‘folder2’ 应该作为 ‘folder1’ 的子级,但原始数据中缺少 ‘folder1/folder2’ 的条目,你需要根据实际情况调整输入数据或重组逻辑。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用PyCharm编写OpenCV 3.4.14训练自己的Haar级分类器的代码示例: 1. 首先,需要安装OpenCV 3.4.14和Python。 2. 创建一个新的PyCharm项目,并创建一个名为“haar_training”的Python文件。 3. 导入必要的库: ```python import cv2 import os import numpy as np ``` 4. 设置训练数据和目标文件夹: ```python # 训练数据和目标文件夹 pos_folder = "positive_images" neg_folder = "negative_images" pos_img_dir = os.getcwd() + "\\" + pos_folder neg_img_dir = os.getcwd() + "\\" + neg_folder ``` 5. 准备正面和负面图像: ```python # 准备正面和负面图像 pos_images = [os.path.join(pos_img_dir, f) for f in os.listdir(pos_img_dir)] neg_images = [os.path.join(neg_img_dir, f) for f in os.listdir(neg_img_dir)] ``` 6. 创建正面和负面图像txt文件: ```python # 创建正面和负面图像txt文件 with open("pos.txt", "w") as f: for img in pos_images: f.write(img + "\n") with open("neg.txt", "w") as f: for img in neg_images: f.write(img + "\n") ``` 7. 创建vec文件: ```python # 创建vec文件 vec_command = f"opencv_createsamples -info pos.txt -num 100 -w 24 -h 24 -vec pos.vec" os.system(vec_command) ``` 8. 训练分类器: ```python # 训练分类器 train_command = f"opencv_traincascade -data classifier -vec pos.vec -bg neg.txt -numPos 80 -numNeg 40 -numStages 10 -w 24 -h 24" os.system(train_command) ``` 9. 运行代码,等待训练完。 注意:以上代码仅供参考,实际使用时需要根据自己的数据集和需求进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值