嵌套Lodash ForEach

时间:2014-02-03 16:49:20

标签: node.js object coffeescript performance lodash

我有一个相当深的内存数据库,我认为,我找到了代码的最佳实现,如果有人有更好的方法在lodash中执行双重forEach循环,或者如果我错误地使用它会很高兴知道。

对象:

smallDB = {
  user1:{
    permissions:[],
    locations:[
      {ip:'0.0.0.0',messages:[]},
      {ip:'',messages:[]}
    ]
  },
  user2:{
    permissions:[],
    locations:[
      {ip:'0.0.0.0',messages:[]},
      {ip:'0.0.1.0',messages:[{mid:'a unique id','user':'the sender',message:'the text of the message'}]}
    ]
  }
}

发送我使用的消息:

ld.forEach smallDB, (a)->
  ld.forEach a.locations, (b)->
    b.messages.push {mid,user,message}

我只是想确保这是为smallDB及其所有位置的所有用户添加消息到迷你数据库的最佳方式

1 个答案:

答案 0 :(得分:1)

您可以执行一项非常简单的优化如果您使用{mid,user,message}创建的对象不可变

record = {mid,user,message}
ld.forEach smallDB, (a)->
  ld.forEach a.locations, (b)->
    b.messages.push record

如果这样做,每次推送时都可以节省创建新对象的成本。删除forEach以支持使用for也会使事情变得更快。

通过允许更直接地访问您在原始代码中以b.messages访问的阵列,可以进一步优化,但这会使添加和删除用户或位置变得复杂。除非通过分析证明过早优化,否则我认为不值得。