javascript - Underscore.js findWhere 嵌套对象

标签 javascript underscore.js lodash

我有一个文件夹/文件对象,如下所示:

{
  about.html : {
    path : './about.html'
  },
  about2.html : {
    path : './about2.html'
  },
  about3.html : {
    path : './about3.html'
  },
  folderName : {
    path : './folderName',
    children : {
      sub-child.html : {
        path : 'folderName/sub-child.html'
      }
    }
  }
}

它可以深入包含子文件夹的 6-7 层。

我想找到 path 等于我提供的字符串的对象。不管有多深。

我使用的下划线仅执行顶层操作:

_.findWhere(files,{path:'./about2.html'}

如何进行深度嵌套搜索。 underscore 是否有相关功能,或者我是否需要构建一个具有递归功能的 mixin?

最佳答案

这不是最漂亮的代码,但我对其进行了测试,它似乎按照您要求的方式工作。它被设置为 lodash/下划线混合,但可以使用。用法如下:

_.findDeep(testItem, { 'path': 'folderName/sub-child.html' })

实现:

findDeep: function(items, attrs) {

  function match(value) {
    for (var key in attrs) {
      if(!_.isUndefined(value)) {
        if (attrs[key] !== value[key]) {
          return false;
        }
      }
    }

    return true;
  }

  function traverse(value) {
    var result;

    _.forEach(value, function (val) {
      if (match(val)) {
        result = val;
        return false;
      }

      if (_.isObject(val) || _.isArray(val)) {
        result = traverse(val);
      }

      if (result) {
        return false;
      }
    });

    return result;
  }

  return traverse(items);

}

关于javascript - Underscore.js findWhere 嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27623896/

相关文章:

underscore.js - underscorejs - extendOwn 和 extend 有什么区别?

对象值的 Javascript Sum 数组

javascript - 在Grails中<g:remotelink>/Ajax调用之后的下拉 Bootstrap

javascript - 检索 Firebase 对象 ID

javascript - 嵌套模型模板 - 主干和下划线

javascript - 在underscore/lodash中,如何避免 `map`方法中的重复计算?

javascript - NodeJS : recursive function with async request

javascript - Jquery滚动函数排除可变高度

asp.net - 测量客户端与服务器上的网页性能

javascript - 如何按值查找 JS 集合中的对象