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的计算属性通常在搞不不确定的情况下使用,运算符和数字之间一定要有空格。