美文网首页
处理数据结构

处理数据结构

作者: Gopal | 来源:发表于2017-12-06 15:58 被阅读1次

    问题:下面是要处理的数据结构,就是username相同admin_role_name的合并起来,放到一个数组admin_role_names中

    let data = [{
      username: 'admin',
      name: '管理员',
      disable: 0,
      admin_role_name: '知识库管理员'
    },
    {
      username: 'xiaoming',
      name: '111',
      disable: 0,
      admin_role_name: '超级管1理员'
    },
    {
      username: 'xiaoming',
      name: '111',
      disable: 0,
      admin_role_name: '知识库管理员'
    },
    {
      username: 'xiaohua',
      name: '小花',
      disable: 0,
      admin_role_name: '知识库管理员'
    },
    {
      username: 'dalao',
      name: '大佬',
      disable: 0,
      admin_role_name: '知识库管理员'
    },
    {
      username: 'dalao',
      name: '大佬',
      disable: 0,
      admin_role_name: '超级管理员'
    }]
    

    处理方法

    let len = data.length
    let tempArr = []
    for (let i = 0; i < len; i++) {
      let item = data[i]
      let name = item.username
      if (tempArr[name] === undefined) {
        tempArr[name] = {}
        tempArr[name].username = item.username
        tempArr[name].name = item.name
        tempArr[name].disable = item.disable
        tempArr[name].admin_role_names = []
        tempArr[name].admin_role_names.push(item.admin_role_name)
      } else {
        tempArr[name].admin_role_names.push(item.admin_role_name)
      }
    }
    console.log(tempArr)
    console.log(Object.values(tempArr))
    

    封装成的工具类

    /**
     * @description 对具有相同属性的对象的合并另一个属性并存在于一个新的数组的函数
     * @function
     * @param {Array} arr - 需要整理的数组
     * @param {String} uniqueName - 相同的属性名
     * @param {String} needMergeName - 需要合并的属性名
     * @param {String} mergedArr - 最后合并到的数组名
     */
    function mergeArr (arr, uniqueName, needMergeName, mergedArr) {
      let len = arr.length
      let finalArr = []
      let arrValues = Object.keys(arr[0])
      console.log(arrValues)
      for (let i = 0; i < len; i++) {
        let item = arr[i]
        let name = arr[i][uniqueName]
        if (finalArr[name] === undefined) {
          finalArr[name] = {}
          for (let j = 0; j < arrValues.length; j++) {
            console.log(arrValues[j])
            finalArr[name][arrValues[j]] = item[arrValues[j]]
          }
          finalArr[name][mergedArr] = []
          finalArr[name][mergedArr].push(item[needMergeName])
        } else {
          finalArr[name][mergedArr].push(item[needMergeName])
        }
      }
      return Object.values(finalArr)
    }
    

    结果

    结果

    相关文章

      网友评论

          本文标题:处理数据结构

          本文链接:https://www.haomeiwen.com/subject/lbqlixtx.html