2017-02-04 128 views
2

我正在嘗試搜索Lodash _.get_.has的Underscore等效項,它可以直接訪問嵌套對象值的存在和值,而無需檢查其父母的存在。下劃線相當於Lodash _.get和_.has

但是,在我看來,下劃線_.get_.has只能檢查第一級的值。

var object = { 'a': { 'b': 2 } }; 
_.has(object, 'a.b'); // lodash shows true 
_.has(object, 'a.b'); // underscore shows false 

回答

4

據我所知,undercore不執行深層搜索,所以你必須滿足於淺hasget(或更改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>

0

使用underscore.get模塊

const {get} = require('underscore.get'); 

Underscore.Get

相關問題