2017-04-11 80 views
1

有没有任何方法可以在路径中获取值,并且如果它们不被定义,则可以使用回退到其他路径的路径?Lodash - 使用默认值在路径上获取价值

var object = { a: 1 } 

// Try to get d, fallback to e and then a 
_.get(object, 'd', _.get(object, 'e', _.get(object, 'a'))) 

有没有更好的方法来解决这个问题?

+0

你需要严格后备未定义的属性,也可以是假的太?如果你想为falsy值回退,你可以做obj.d || obj.e || obj.f,否则你可以用object.hasOwnProperty做一个循环,并返回定义的第一个匹配键的值。 – Christopher

+0

最好只适用于未定义的,但在这里可以接受任何虚假的东西。寻找一些比obj.d更习惯的东西obj.e || obj.f'。类似'_.pick',但是为了选择一个值,而不是选择键。 –

回答

2

想我会为这一点,但还是想看看是否有人想出了更好的东西用lodash。

_.get(object, _.findKey(object, _.rearg(_.partial(_.includes, ['d', 'e', 'f']), 1))) 

更新

如果u想找到嵌套路径键,以便返回上述不会工作:

_(object).at('b', 'c', 'd', 'e', 'a').compact().first() 
1

你可以为此做出自己的帮助方法,也许这样?

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'); 
+0

谢谢:)但不喜欢mixin。 –

+1

我刚刚想出了__first(_。compact(_。at(object,'b','c','d','e','a')))' –

+0

这是一个更好的?不确定关于可读性tho –