数据结构转换

1.根据id把扁平数据结构转换为树状数据结构?

function buildTree(data, idKey, parentKey, rootParentValue = 0) {
  const tree = [];


  // 遍历数据
  for (let i = 0; i < data.length; i++) {
    const item = data[i];


    // 如果当前项的父级ID等于指定的根父级值,则将其添加到树中
    if (item[parentKey] === rootParentValue) {
      // 递归构建子树
      const children = buildTree(data, idKey, parentKey, item[idKey]);


      // 将子树添加到当前项的children属性中
      if (children.length > 0) {
        item.children = children;
      }


      // 将当前项添加到树中
      tree.push(item);
    }
  }


  return tree;
}


// 使用示例
const flatData = [
  {
    id: 1,
    name: "A",
    parent_id: 0
  },
  {
    id: 2,
    name: "B",
    parent_id: 1
  },
  {
    id: 3,
    name: "C",
    parent_id: 2
  },
  {
    id: 4,
    name: "D",
    parent_id: 3
  }
  // 其他数据项...
];


const treeData = buildTree(flatData, "id", "parent_id");
console.log(treeData);
在上面的示例中,我们将buildTree函数修改为接受四个参数:data表示扁平数据数组,idKey表示数据项的ID属性的键名,parentKey表示数据项的父级ID属性的键名,rootParentValue表示根父级的值,默认为0。通过这种方式,我们可以根据不同的数据结构来构建树状结构。

2、把树状数据结构转换为扁平数据结构?

function flattenTree(tree) {
  let result = [];

  function traverse(node, path) {
    if (typeof node === 'object') {
      for (let key in node) {
        traverse(node[key], path.concat(key));
      }
    } else {
      result.push({ path: path, value: node });
    }
  }

  traverse(tree, []);
  return result;
}

这个函数接受一个树状结构的数据作为输入,并返回一个扁平的结构数据数组。每个数组项都是一个对象,包含路径和对应的值。你可以将你的树状结构数据作为参数传递给这个函数,然后获取转换后的结果。

3。删除对象中的某一个属性?

delete 对象.属性

4:。如何把一个对象变成空对象,不改变对象的引用地址?

function makeObjectEmpty(obj) {
  Object.keys(obj).forEach(key => {
    delete obj[key];
  });
}

// 示例用法
const myObj = {
  name: 'John',
  age: 30,
  city: 'New York'
};

console.log(myObj); // 输出 { name: 'John', age: 30, city: 'New York' }

makeObjectEmpty(myObj);

console.log(myObj); // 输出 {}

makeObjectEmpty 方法接受一个对象作为参数。使用 Object.keys(obj) 获取对象的所有属性名,然后使用 forEach 方法遍历每个属性名。在遍历过程中,使用 delete 关键字删除对象的每个属性。

需要注意的是,这个方法会直接修改原始对象,所以在调用方法后,原始对象将变成一个空对象。

5、你可以封装一个函数来实现将子级的属性名改成相同的名字。下面是一个示例函数,它接收一个对象数组作为参数,并将每个对象的子级属性名改为相同的名字

function renameChildProperties(arr, newName) {
  return arr.map(obj => {
    const newObj = {};
    for (const key in obj) {
      if (typeof obj[key] === 'object' && obj[key] !== null) {
        newObj[newName] = renameChildProperties(obj[key], newName);
      } else {
        newObj[key] = obj[key];
      }
    }
    return newObj;
  });
}

使用示例:

const data = [
  {
    id: 1,
    name: 'John',
    info: {
      age: 25,
      address: {
        street: '123 Main St',
        city: 'New York',
      },
    },
  },
  {
    id: 2,
    name: 'Jane',
    info: {
      age: 30,
      address: {
        street: '456 Elm St',
        city: 'Los Angeles',
      },
    },
  },
];

const result = renameChildProperties(data, 'details');
console.log(result);

输出结果:

[
  {
    id: 1,
    name: 'John',
    details: {
      age: 25,
      address: {
        street: '123 Main St',
        city: 'New York',
      },
    },
  },
  {
    id: 2,
    name: 'Jane',
    details: {
      age: 30,
      address: {
        street: '456 Elm St',
        city: 'Los Angeles',
      },
    },
  },
]

在上述示例中,renameChildProperties 函数将 info 属性名改为了 details,同时递归处理了嵌套的子级属性。

6;CSS中的calc()函数可以用于执行简单的数学计算,并将计算结果应用于CSS属性的值。

calc()函数的语法如下:

property: calc(expression);

其中,expression是一个包含数学表达式的字符串,可以包含加法、减法、乘法和除法运算符,以及长度、百分比和其他CSS单位。

下面是一些示例,演示了如何使用calc()函数:

/* 使用calc()计算宽度 */
width: calc(100% - 20px);

/* 使用calc()计算高度 */
height: calc(50vh + 100px);

/* 使用calc()计算字体大小 */
font-size: calc(16px + 2vw);

/* 使用calc()计算间距 */
margin: calc(10px + 5%);

/* 使用calc()计算透明度 */
opacity: calc(0.5 * 0.8);

在上面的示例中,我们使用calc()函数执行了一些简单的数学计算,并将计算结果应用于不同的CSS属性。

请注意,calc()函数中的数学表达式必须符合CSS语法规则,并且不能嵌套使用calc()函数。

css的计算属性通常在搞不不确定的情况下使用,运算符和数字之间一定要有空格。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值