遇到数组的各种处理
1、从对象数组中找出 id 相同的对象,放到新数组(二维数组)中
-
原链接:http://www.gkh0305.com/archives/findinfobyid
const list = [
{
id: 1,
name: "张三",
},
{
id: 1,
name: "李四",
},
{
id: 2,
name: "王麻子",
},
];
// 根据吧id相同的对象整合到一个新数组里
const newList = [];
list.forEach(item => {
let flag = undefined;
newList.some(el => {
if (el.length > 0) {
if (el[0].id === item.id) {
flag = el;
return true;
}
}
});
if (typeof flag !== "undefined") {
flag.push(item);
} else {
newList.push([item]);
}
flag = undefined;
});

2、JavaScript 中的递归:对象数组里根据 id 获取 name,对象可能有 children 属性
-
原链接: https://www.cnblogs.com/starlog/p/15356396.html
getFlatArr(arr) {
return arr.reduce((a, item) => {
let flatArr = [...a, item];
if (item.children) {
flatArr = [...flatArr, ...this.getFlatArr(item.children)];
}
return flatArr;
}, []);
}
getNameByIdFromArr(arr, id) {
return this.getFlatArr(arr).find(item => item.id === id).name;
}
get getName() {
if (this.val.length === 0 || this.List.length === 0) {
return "";
}
const find = this.val.map(el => {
return this.getNameByIdFromArr(this.List, el);
});
return find ? find.toString() : "";
}
val = [1,2,3]
List = [
{
id: 1,
name: '张三',
children: [
{
id: 2,
name: '李四'
}
]
},
{
id: 3,
name: '王五'
}
]

3、字符串和数组的相互转换
1、数组转字符串
-
1、toString 能够把每个元素转换为字符串,然后以逗号链接输出显示
const arr = [1,2,3,4]
const str = arr.toString(); // 1,2,3,4 -
2、join 也可以把数组转成字符串,它可以指定分隔符,不指定符号默认是以逗号链接输出显示
const arr = [1,2,3,4]
const str = arr.join(); // 1,2,3,4
const str = arr.join(','); // 1,2,3,4
2、字符串转数组
-
1、split 可以指定某个特定的符号来分割加入到数组中
const str = '1,2,3'
const arr = str.split(',') // ["1","2","3"] -
2、字符串转换成数字数组
const str = '1,2,3,4'
const arr = str.split(',').map(Number) // [1,2,3,4] -
3、使用解构形成数组
const str = "1234"
const arr = [...str] // ["1","2","3","4"]
3、map(Number)和 map(String)
-
1、字符串数组转数字数组
const array = ["1","2","3"]
const arr = array.map(Number) // [1,2,3] -
2、数字数组转字符串数组
const array = [1,2,3]
const arr = array.map(String) // ["1","2","3"]
数组里的最后一级 children 去掉
-
原数组
![]()
-
新数组
![]()
created() {
const list = [
{
id: 1,
name: "张三",
children: [
{ id: 2, name: "李四", children: [] },
{ id: 3, name: "王五", children: [] },
],
},
];
console.log(this.handleTreeData(list));
}
handleTreeData(data) {
for (let i = 0; i < data.length; i++) {
if (data[i].children.length < 1) {
data[i].children = void 0; // 看后端返的是child字段还是children字段,自行改变
} else {
this.handleTreeData(data[i].children); // children若不为空数组,则继续 递归调用 本方法
}
}
return data;
}



浙公网安备 33010602011771号