export function transTreeData(list) { // 1. 遍历数组中所有的数据对象,给每一个对象添加chilren属性值为[] // 2. 创建一个映射对象(js对象)为了方便找数据对象 通过id 可以直接找到对应的数据对象 const mapObj = { } list.forEach(item => { item.children = [] mapObj[item.id] = item }) // 3. 实现平铺数据转树形数据 const newArr = [] // 存储的是一级的数据 list.forEach(item => { // 根据当前取出的对象,使用item.pid 找父级 const parent = mapObj[item.pid] // undefined || 一级的数据对象 if (parent) { // 如果parent=数据对象 说明item 是二级的数据 parent.children.push(item) } else { // 如果parent=undefined 说明item 是一级的数据 newArr.push(item) } }) // console.log(newArr,'newArr'); return newArr }这段代码的意思
时间: 2024-03-07 18:52:35 浏览: 21
这段代码实现了将一个平铺的数组数据转换成树形数据的功能。具体实现过程如下:
1. 遍历数组中所有的数据对象,给每一个对象添加children属性值为[],以便后续存储子节点。
2. 创建一个映射对象(mapObj),用于方便通过id找到对应的数据对象。
3. 遍历数组(list),根据每个数据对象的pid找到对应的父级数据对象,如果存在,则将当前数据对象存储在父级的children数组中,否则说明当前数据对象是一级数据,直接存储在newArr数组中。
最终返回newArr数组,即转换后的树形数据。
相关问题
js遍历对象给key改名
要在JavaScript中遍历对象并更改键名,您可以使用递归和条件语句来完成此操作。以下是一个示例函数来遍历对象并更改键名:
```javascript
function renameKeys(obj, keyMap) {
if (typeof obj !== 'object') {
return obj;
}
const result = {};
for (let key in obj) {
let newKey = key;
for (let i = 0; i < keyMap.length; i++) {
if (keyMap[i].key === key) {
newKey = keyMap[i].value;
break;
}
}
result[newKey] = renameKeys(obj[key], keyMap);
}
return result;
}
```
使用这个函数,您可以传入一个对象和一个键映射数组,数组中的每个对象都具有要更改的键名和新的键名。函数将递归地遍历对象,并根据键映射数组中的匹配项更改键名。以下是使用这个函数的示例代码:
```javascript
const obj = {
Name: "test1Name",
type: "test",
model: "model2"
};
const keyMap = [
{ key: "type", value: "chilren" },
{ key: "model", value: "chilren" }
];
const result = renameKeys(obj, keyMap);
console.log(result);
```
输出将是一个具有更改键名的新对象:
```javascript
{
Name: "test1Name",
chilren: "test",
chilren: "model2"
}
```
生成一个js方法,要求对比两个数组,如果第二个数组中某一项的id等于第一个数组的某一项的id,就把这一项push到第一个数组这一项的chilren字段中
好的,这是一个比较简单的问题,可以使用for循环遍历两个数组,如果发现第二个数组中某一项的id等于第一个数组的某一项的id,则将该项push到第一个数组中该项的children字段中。下面是一个示例代码:
```
function compareArrays(arr1, arr2) {
for (let i = 0; i < arr1.length; i++) {
for (let j = 0; j < arr2.length; j++) {
if (arr1[i].id === arr2[j].id) {
if (!arr1[i].children) {
arr1[i].children = [];
}
arr1[i].children.push(arr2[j]);
}
}
}
return arr1;
}
```
你觉得这个方法好用吗?