js 循环数组取值

简介: js 循环数组取值

需要循环的数据
image.png

js将数组转换成树形结构
实验代码:

toTree(data) {
   
      let result = []
      if (!Array.isArray(data)) {
   
        return result
      }
      data.forEach(item => {
   
        delete item.children;
      });
      let map = {
   };
      data.forEach(item => {
   
        map[item.itemId] = item;
      });
      for (item in map) {
   
        // let parent = map[item.pid];
        // if (map[item.pid] && item.id !== item.pid) {
   
        //   if (!item.children) {
   
        //     item.children = []
        //   }
        //   if (!item.pid._level) {
   
        //     item.pid._level = 1
        //   }
        //   item._level = temp[item.pid]._level + 1
        //   item.pid.children.push(item)
        // } else {
   
        //   res.push(item)
        // }

        console.log(item);
        // if (parent) {
   
        //   (parent.children || (parent.children = [])).push(item);
        // } else {
   
        //   result.push(item);
        // }
      }
      return result;
    },

已验证代码:

/**
 * 树形数据转换
 * @param {*} data
 * @param {*} id
 * @param {*} pid
 */
export function treeDataTranslate(data, id = 'itemId', pid = 'parentId') {
   
  var res = []
  var temp = {
   }
  for (var i = 0; i < data.length; i++) {
   
    temp[data[i][id]] = data[i]
  }
  for (var k = 0; k < data.length; k++) {
   
    if (temp[data[k].pid] && data[k][id] !== data[k].pid) {
   
      if (!temp[data[k].pid]['children']) {
   
        temp[data[k].pid]['children'] = []
      }
      if (!temp[data[k].pid]['_level']) {
   
        temp[data[k].pid]['_level'] = 1
      }
      data[k]['_level'] = temp[data[k].pid]._level + 1
      temp[data[k].pid]['children'].push(data[k])
    } else {
   
      res.push(data[k])
    }
  }
  return res
}

/**
 * 按指定字段分类,树形数据转换
 * @param {*} data
 * @param {*} id
 * @param {*} pid
 */
export function treeDataTranslateByType(oldData, id = 'funID', pid = 'pid', key = 'funID', Type = 'projectId', hasChildren = true) {
   
  var res = []
  var temp = {
   }
  var data = []
  oldData.map(function(item) {
   
    data.push(item)
  })
  for (var i = 0; i < data.length; i++) {
   
    var type = data[i][Type] ? data[i][Type] : ''
    temp[type + '' + data[i][key] + '' + data[i][id]] = data[i]
  }
  for (var k = 0; k < data.length; k++) {
   
    var tempKey = ''
    oldData.map(function(item) {
   
      if (item[id] === data[k][pid] && item[Type] === data[k][Type] && item[key] < data[k][key]) {
   
        var type = item[Type] ? item[Type] : ''
        tempKey = type + '' + item[key] + '' + item[id]
      }
    })
    if (temp[tempKey] && data[k][id] !== data[k][pid]) {
   
      if (!temp[tempKey]['children']) {
   
        temp[tempKey]['children'] = []
      }
      if (!temp[tempKey]['_level']) {
   
        temp[tempKey]['_level'] = 1
      }
      if (hasChildren) {
   
        data[k]['_level'] = temp[tempKey]._level + 1
        temp[tempKey]['children'].push(data[k])
      } else {
   
        data[k]['children']
      }
    } else {
   
      res.push(data[k])
    }
  }
  return res
}
相关文章
|
2月前
|
JavaScript 前端开发
js循环有几种
js循环有几种
37 0
|
1月前
|
JavaScript
js动画循环播放特效源码(上班族的一天)
js动画循环播放特效是一段实现了包含形象的卡通小人吃、睡、电脑工作的网页动画,js循环动画,简单的画面设计。非常丝滑有意思,欢迎对此代码感兴趣的朋友前来下载参考。
29 2
|
2月前
|
自然语言处理 前端开发 JavaScript
🛠️ JavaScript数组操作指南:20个精通必备技巧🚀
本文详细介绍了 JavaScript 中的 20 个高效数组操作技巧,涵盖了从基本的添加、移除元素,到数组转换和去重等高级操作。强调了不可变性的重要性,提供了清晰的代码示例,帮助开发者编写更整洁和高效的代码。无论是新手还是经验丰富的开发者,这些技巧都将显著提升您的编码能力,使您在项目中更具竞争力。
39 2
|
2月前
|
JavaScript 前端开发 测试技术
JS都有哪些操作数组的方法
JS都有哪些操作数组的方法
29 3
|
2月前
|
JavaScript
js删除数组中已知下标的元素
js删除数组中已知下标的元素
45 4
|
2月前
|
缓存 JavaScript 前端开发
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
JavaScript中数组、对象等循环遍历的常用方法介绍(二)
49 1
|
2月前
|
JavaScript 前端开发 Java
【javaScript数组,函数】的基础知识点
【javaScript数组,函数】的基础知识点
28 5
|
2月前
|
JavaScript 前端开发 索引
JS 删除数组元素( 5种方法 )
JS 删除数组元素( 5种方法 )
62 1
|
2月前
|
JavaScript 前端开发 API
JS中数组的方法flat()怎么用
JS中数组的方法flat()怎么用
23 0
|
2月前
|
JavaScript 前端开发 索引
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
JavaScript中数组、对象等循环遍历的常用方法介绍(一)
31 0