2021-05-10

数组进阶

//数组进阶
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
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值