js 循环**数据结构处理**问题, 遇到瓶颈,求方案(考虑性能)

  1. 数据结构描述

    var users = [
        {id: 1, username: '123', authPlayerIds: [1001, 1002, 1003]},
        {id: 2, username: 'qwe', authPlayerIds: [1003, 1004, 1005]},
        {id: 3, username: 'fdf', authPlayerIds: [1002, 1007, 1088]},
        {id: 4, username: 'dsa', authPlayerIds: [1001, 1022, 1033]},
        ...    // 注意: 数据在`20000`以上]
  2. 需求描述

    • 计算authPlayerIds字段中的每一项(id)所出现的次数以及包含它的用户(user)

    • 性能优先(首选)

    • 处理结束后的数据结构

      var authPlayers = {  
        '1001': [
              {id: 1, username: '123'},
              {id: 4, username: 'dsa'}
          ],    '1002': [
              {id: 1, username: '123'},
              {id: 3, username: 'fdf'},
              {id: 4, username: 'dsa'},
          ],    '1003': [
              {id: 1, username: '123'},
              {id: 2, username: 'qwe'},
          ]
      }
  3. 语言及工具描述

    • JavaScript

    • Node.js

    • Lodash

    • underscore

    • async

    • bluebird

    • 一切你想用的工具都可以

  4. 在线急等...

    • 是时候表演真正的技术了


有只小跳蛙
浏览 972回答 2
2回答

摇曳的蔷薇

var authPlayers = {};&nbsp; &nbsp; &nbsp; &nbsp; for(var i=0;i<users.length;i++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var use = users[i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var useIds = users[i].authPlayerIds;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; delete use.authPlayerIds;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var j=0;j<useIds.length;j++){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if( authPlayers[useIds[j]] == undefined ){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; authPlayers[useIds[j]]=[];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; authPlayers[useIds[j]].push(use);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; authPlayers[useIds[j]].push(use);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //console.log( authPlayers[useIds[j]]&nbsp; )&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }

大话西游666

var users = [&nbsp; &nbsp; {id: 1, username: '123', authPlayerIds: [1001, 1002, 1003]},&nbsp; &nbsp; {id: 2, username: 'qwe', authPlayerIds: [1003, 1004, 1005]},&nbsp; &nbsp; {id: 3, username: 'fdf', authPlayerIds: [1002, 1007, 1088]},&nbsp; &nbsp; {id: 4, username: 'dsa', authPlayerIds: [1001, 1022, 1033]},]var ret = {}users.forEach(function(e){&nbsp; &nbsp; var ap = e.authPlayerIds&nbsp; &nbsp; ap.forEach(function(p){&nbsp; &nbsp; &nbsp; &nbsp; var t = {}&nbsp; &nbsp; &nbsp; &nbsp; if (ret[p]) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.id = e.id || null&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.username = e.username || null&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ret[p] = []&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.id = e.id || null&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.username = e.username || null&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ret[p].push(t)&nbsp; &nbsp; })})
打开App,查看更多内容
随时随地看视频慕课网APP