数组进阶
//数组进阶
var list = [
{
id:1,
name:'老李',
gender:'男',
score :78
},
{
id:2,
name:'老铁',
gender:'男',
score :68
},
{
id:3,
name:'老王',
gender:'女',
score :55
},
{
id:4,
name:'老管',
gender:'女',
score :66
},
{
id:5,
name:'老兰',
gender:'男',
score :99
},
{
id:6,
name:'老张',
gender:'女',
score :90
},
{
id:7,
name:'老钱',
gender:'女',
score :55
},
]
forEach 遍历数组,会遍历到数组的每个元素
list.forEach((item,index)=>{
console.log(item);
})
filter 过滤数组,会根据某个条件对数组进行过滤,最终返回一个新的数组,不会影响原数组
var arr = list.filter(item=>{
if (item.gender === '男') {
return true
}else{
return false
}
return item.score > 80
})
console.log(arr);
map 根据原数组,返回一个新的数组,此数组结构会发生变化
var arr = list.map(item=>{
return item.name
})
console.log(arr);
some 用户查询数组中是否有符合条件的某个元素,如果有,返回true,没有,就返回false
遍历的次数不确定,一旦找到符合条件的,就立即返回,不再遍历
var arr = list.some(item=>{
console.log(item.id);
return item.score < 60
})
console.log(arr);
every 用于查询数组中是否每一个元素都符合条件,如果都符合返回true,如果有不符合的,false
遍历的次数不确定,一旦找到不符合条件的,就立即返回,不再遍历
var arr = list.every(item=>{
return item.score > 2 //2 true 60 false
})
console.log(arr);
find 查找符合条件的某个元素,返回元素对象
遍历的次数不确定,一旦找到符合条件的,立即返回该元素对象
var arr = list.find((item, index)=>{
console.log(index);
return item.score > 80
})
console.log(arr);
findIndex 查找符合条件的某个元素,返回元素的索引
如果没找到,返回-1
遍历的次数不确定,一旦找到符合条件的,就立即返回该元素对象的索引,终止遍历
var arr = list.findIndex((item, index)=>{
console.log(index);
return item.score < 60
})
console.log(arr);
/**
* 把平铺的数组结构转成树形结构
*
* [
* {id:"01", pid:"", "name":"老王" },
* {id:"02", pid:"01", "name":"小张" }
* ]
* 上面的结构说明: 老王是小张的上级
*/
export function tranListToTreeData(list) {
// 最终要产出的树状数据的数组
const treeList = []
// 所有项都使用对象存储起来
const map = {}
// 建立一个映射关系:通过id快速找到对应的元素
list.forEach(item => {
if (!item.children) {
item.children = []
}
map[item.id] = item
})
// map:
// {
// "312c": { 'id': '312c', 'pid': '', 'name': '财务部', children: [{ 'id': '312d', 'pid': '312c', 'name': '财务核算部',children: []}] },
// "312d": { 'id': '312d', 'pid': '312c', 'name': '财务核算部',children: []}
// }
list.forEach(item => {
// 对于每一个元素来说,先找它的上级
// 如果能找到,说明它有上级,则要把它添加到上级的children中去
// 如果找不到,说明它没有上级,直接添加到 treeList
const parent = map[item.pid]
// 如果存在上级则表示item不是最顶层的数据
if (parent) {
parent.children.push(item)
} else {
// 如果不存在上级 则是顶层数据,直接添加
treeList.push(item)
}
})
// 返回出去
return treeList
}