我有一个文件夹/文件对象,如下所示:
{
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/