重构多重children数据 减少数据

为了将给定的数据结构从使用 keytitle 转换为使用 valuelabel,并且确保子节点(如果有的话)也遵循相同的结构,你可以使用JavaScript的map方法来遍历数组并重构每个对象。这里是如何做的:

const originalData = [
  {
    key: "1181175685528424448",
    title: "智享无界科技有限公司",
    value: "1181175685528424448",
    children: [
      {
        children: null,
        title: "上海技术部",
        value: "1181175865409540096",
        key: "1181175865409540096"
      },
      {
        children: null,
        title: "上海技术部1",
        value: "11811758654095400961",
        key: "11811758654095400961"
      }
    ]
  }
];

function transformData(data) {
  return data.map(item => ({
    value: item.value,
    label: item.title, // 假设你希望将"title"改为"有来智享无界科技有限公司",则直接替换此值
    children: item.children ? transformData(item.children) : null
  }));
}

const transformedData = transformData(originalData);

// 如果需要将"智享无界科技有限公司"改为"有来智享无界科技有限公司",你可以在这里进行额外的处理
// 但在这个例子中,我们直接保留原始的title值

console.log(transformedData);

然而,如果你确实需要将特定的title值(如"智享无界科技有限公司")替换为"有来智享无界科技有限公司",你可以在transformData函数中添加一个条件判断:

function transformData(data) {
  return data.map(item => ({
    value: item.value,
    label: item.title === "智享无界科技有限公司" ? "有来智享无界科技有限公司" : item.title,
    children: item.children ? transformData(item.children) : null
  }));
}

这样,输出就会按照你的要求,将特定的title值替换掉。不过,请注意,这只会替换顶级元素的title,如果你的数据结构中还有嵌套的、且title值也为"智享无界科技有限公司"的元素,它们也会被替换。如果你只想替换顶级元素的title,你可能需要添加额外的逻辑来区分处理。
在JavaScript中,对象的属性名(如key)在大多数情况下是大小写敏感的。然而,如果你想要将对象中的属性名从key改为Key(注意大小写变化),你需要遍历数组和对象,并创建新的对象来反映这一更改。由于直接修改现有对象的属性名是不可能的(除非使用Object.defineProperty来重新定义属性,但这在简单重构中通常不是必要的),以下是一个简单的函数来实现这一点:

const originalData = [
  {
    key: "1181175685528424448",
    title: "智享无界科技有限公司",
    value: "1181175685528424448",
    children: [
      {
        children: null,
        title: "上海技术部",
        value: "1181175865409540096",
        key: "1181175865409540096"
      },
      {
        children: null,
        title: "上海技术部1",
        value: "11811758654095400961",
        key: "11811758654095400961"
      }
    ]
  }
];

function transformKeysToUpperCase(data) {
  return data.map(item => {
    const newItem = { ...item }; // 浅拷贝原始对象
    // 更改key属性名为Key
    if (newItem.hasOwnProperty('key')) {
      newItem.Key = newItem.key;
      delete newItem.key; // 删除原始key属性
    }
    // 递归处理children
    if (newItem.children) {
      newItem.children = transformKeysToUpperCase(newItem.children);
    }
    return newItem;
  });
}

const transformedData = transformKeysToUpperCase(originalData);

console.log(transformedData);

在这个例子中,transformKeysToUpperCase函数接受一个数组作为输入,并返回一个新的数组,其中每个对象的key属性都被重命名为Key(同时保留了原始对象的其他属性)。如果对象有children属性,则递归地对其执行相同的操作。

请注意,这个函数使用了展开语法(...item)来创建一个新对象,它包含原始对象的所有属性,但随后通过条件检查来添加或删除特定的属性。这种方法保留了除keyKey转换之外的所有原始数据。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值