有沒有任何方法可以在路徑中獲取值,並且如果它們不被定義,則可以使用回退到其他路徑的路徑?Lodash - 使用默認值在路徑上獲取價值
var object = { a: 1 }
// Try to get d, fallback to e and then a
_.get(object, 'd', _.get(object, 'e', _.get(object, 'a')))
有沒有更好的方法來解決這個問題?
有沒有任何方法可以在路徑中獲取值,並且如果它們不被定義,則可以使用回退到其他路徑的路徑?Lodash - 使用默認值在路徑上獲取價值
var object = { a: 1 }
// Try to get d, fallback to e and then a
_.get(object, 'd', _.get(object, 'e', _.get(object, 'a')))
有沒有更好的方法來解決這個問題?
想我會爲這一點,但還是想看看是否有人想出了更好的東西用lodash。
_.get(object, _.findKey(object, _.rearg(_.partial(_.includes, ['d', 'e', 'f']), 1)))
如果u想找到嵌套路徑鍵,以便返回上述不會工作:
_(object).at('b', 'c', 'd', 'e', 'a').compact().first()
你可以爲此做出自己的幫助方法,也許這樣?
function pickValue(obj, keys, defaultValue) {
var foundKey = keys.find(function(key) { return obj.hasOwnProperty(key); });
return foundKey ? obj[foundKey] : defaultValue;
}
用法:
var result = pickValue(obj, ['d', 'e', 'f'], 'default value');
謝謝:)但不喜歡mixin。 –
我剛剛想出了__first(_。compact(_。at(object,'b','c','d','e','a')))' –
這是一個更好的?不確定關於可讀性tho –
你需要嚴格後備未定義的屬性,也可以是假的太?如果你想爲falsy值回退,你可以做obj.d || obj.e || obj.f,否則你可以用object.hasOwnProperty做一個循環,並返回定義的第一個匹配鍵的值。 – Christopher
最好只適用於未定義的,但在這裏可以接受任何虛假的東西。尋找一些比obj.d更習慣的東西obj.e || obj.f'。類似'_.pick',但是爲了選擇一個值,而不是選擇鍵。 –