且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

基于此现有数组对象创建新的多维数组

更新时间:2023-12-01 09:26:22

const acl = [{"view":true,"update":true,"remove":true,"userId":1,"username":"Mike"},{"view":true,"update":true,"remove":false,"userId":2,"username":"Joe"},{"view":true,"update":false,"remove":false,"userId":3,"username":"Lim"}]

function multi_dim (array) {

  const res = {
    view: [],
    update: [],
    remove: []
  }

  const keys = Object.keys(array[0])

  for (let i = 0; i < array.length; i++) {
    keys.forEach(function (key) {
      if (key !== 'username' && key !== 'userId') {
        if (array[i][key]) {
          res[key].push({
            username: array[i].username,
            userId: array[i].userId
          })
        }
      }
    })
  }

  return res

}

let obj = multi_dim(acl) // returns object. Push to array if so desired

console.log(obj)

// => result
//   {
//     "view": [
//       {
//         "username": "Mike",
//         "userId": 1
//       },
//       {
//         "username": "Joe",
//         "userId": 2
//       },
//       {
//         "username": "Lim",
//         "userId": 3
//       }
//     ],
//     "update": [
//       {
//         "username": "Mike",
//         "userId": 1
//       },
//       {
//         "username": "Joe",
//         "userId": 2
//       }
//     ],
//     "remove": [
//       {
//         "username": "Mike",
//         "userId": 1
//       }
//     ]
//   }