我正在尝试为 Lodash _.get
和 _.has
搜索等效的 Underscore,它能够直接访问嵌套对象的存在和值值而不需要检查其 parent 的存在。
但是,在我看来,下划线 _.get
和 _.has
只能检查第一级的值。
var object = { 'a': { 'b': 2 } };
_.has(object, 'a.b'); // lodash shows true
_.has(object, 'a.b'); // underscore shows false
最佳答案
据我所知,undercore 不执行深度搜索,因此您必须满足于浅层 has
和 get
(或更改为 lodash) .
你也可以尝试自己实现(你可以查看lodash的实现并尝试复制它或者想出你自己的解决方案)。
这是has
问题的简单解决方案(get
类似),使用递归和当前下划线has
的实现.
希望对您有所帮助。
var a = {
a: 1,
b: {
a: { c: { d: 1 }}
}
};
var hasDeep = function(obj, path) {
if(!path) return true;
var paths = path.split('.'),
nPath = _.first(paths);
return _.has(obj, nPath) && hasDeep(obj[nPath], _.rest(paths).join('.'));
}
console.log(hasDeep(a, 'b.a.c.d'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>
关于javascript - 相当于 Lodash _.get 和 _.has 的下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42042245/