【问题标题】:Filtering objects in underscore过滤下划线中的对象
【发布时间】:2015-03-31 18:52:55
【问题描述】:

我正在尝试在下划线中创建一个filterObject mixin。进展不太顺利,是不是我遗漏了什么?

_.mixin({
  filterObject: function(collection, fn){
    var n = []
    _.each(collection, function(value, key){
      var decider = fn(value, key)
      if(decider){
        var temp = {}
        temp[key] = value
        n.push(temp)
      }
    })
    return _.extend.apply(null, n);
  }
})

var actionsFlags = {
  "wallpaper": {
    "images": true,
    "queue": false,
  },
  "notify":{
    "message": true,
    "open": true,
    "queue": false,
  },
}

var requiredFlags = _.filterObject(actionsFlags, function(flags){
  return _.filterObject(flags, function(flag){
    return flag
  })
})

我只需要一种方法让 actionsFlags 对象只包含等于 true 的道具。

【问题讨论】:

    标签: javascript loops filter underscore.js each


    【解决方案1】:

    从 1.7 版开始,_.pick 函数可以采用一个可用于代替 filterObject 的迭代器:

    var requiredFlags = _.mapObject(actionsFlags, function(flags){
        return _.pick(flags, function(flag){
            return flag === true;
        })
    })
    

    【讨论】:

      【解决方案2】:

      这行得通,只需要mapObject 然后filterObject

        var requiredFlags = _.mapObject(actionsFlags, function(flags){
          return _.filterObject(flags, function(flag){
            return flag
          })
        })
      

      【讨论】:

      • 您可以将 _.filterObject 的调用替换为对下划线的 _.pick 的调用,该调用从 1.7 版开始可以采用迭代对象。
      • 非常感谢!如果您想提交答案,我会接受。
      【解决方案3】:

      这里是使用开源项目jinqJs http://www.jinqJs.com的方法

      See Fiddle

      var result = jinqJs().from(actionsFlags).select( function(row) {
      var ret = {};
      for(var o in row)
      {
          ret[o] = {};   
          for(var i in row[o])
          {
              if (row[o][i])
                  ret[o][i] = true;
          }
      
      }
      
      return ret;
      

      });

      【讨论】:

        猜你喜欢
        • 2021-01-06
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多