数组的对象转换属性
原始数组
let arr = [
{
id: 123,
name: "张三",
children: [
{
id: 456,
name: 345,
children: [
{
id: 789,
name: 789,
},
],
},
],
},
];
希望转化后的数据
let arr1 = [
{
value: "123",
label: "张三",
children: [
{
value: "456",
label: "345",
children: [
{
value: "789",
lebel: "789",
},
],
},
]
}
]
转化的方法
// 定义将原始数据转换为目标格式的递归函数
function convertData(data) {
// 如果传入的数据为空或不是数组类型,则返回空数组
if (!data || !Array.isArray(data)) {
return [];
}
// 将子节点转换为目标格式,并存储到新数组中
const result = data.map((item) => {
const obj = {
};
obj.value = item.id; //这里的item根据自己的业务进行改变
obj.label = item.name;
obj.children = convertData(item.children); // 递归调用自身处理所有子孙节点
return obj;
});
return result;
}
使用
let arr1 = convertData(arr)
console.log(arr1) //此时的arr1就是上面效果
数组对象的某个属性收集到数组
//定一个对象
let obj = [
{
id: 34,
children: [
{
id: 13,
children: [
{
id: 16,
},
],
},
],
},
];
//处理对象的方法
const qxcl = (data, arr = []) => {
//参数一传入的对象,参数二不用填写,这个方法内部递归时才用到参数二(只传对象就好)
data.forEach((item) => {
if (item.children) {
arr.push(item.id); //这里可以选择修改你想收集的值(有两处)
return qxcl(item.children, arr); //递归将上面数组对象的所有id值都遍历到,都存到arr中
}
arr.push(item.id); //这里可以选择修改你想收集的值(有两处)
return arr;
});
console.log("arr", arr);
return arr;
};
let arr = qxcl(obj);
console.log("arr", arr); //打印的值 [34, 13, 16]