Javascript Lodash返回键(如果存在),否则返回另一个键

Javascript Lodash返回键(如果存在),否则返回另一个键,javascript,lodash,Javascript,Lodash,假设我想做一些类似的事情: const result = 'someKey' in myVar ? myVar.someKey : myVar.anotherKey 我可以使用get(myVar,'someKey',get(myVar,'anotherKey'))实现同样的功能。我想知道是否还有另一种lodash方法看起来更干净?我不相信存在这样的lodash函数,但可以编写一个简单的实用程序来提供这种行为: function getFirst(obj, ...paths) {

假设我想做一些类似的事情:

const result = 'someKey' in myVar
  ? myVar.someKey
  : myVar.anotherKey

我可以使用
get(myVar,'someKey',get(myVar,'anotherKey'))
实现同样的功能。我想知道是否还有另一种lodash方法看起来更干净?

我不相信存在这样的lodash函数,但可以编写一个简单的实用程序来提供这种行为:

function getFirst(obj, ...paths) {
    for (const path of paths) {
        if (_.has(obj, path)) {
            return _.get(obj, path);
        }
    }
    return;
}

我不相信存在这样的lodash函数,但可以编写一个简单的实用程序来提供这种行为:

function getFirst(obj, ...paths) {
    for (const path of paths) {
        if (_.has(obj, path)) {
            return _.get(obj, path);
        }
    }
    return;
}

Lodash中没有内置函数允许这样做(很遗憾)。然而,正如他在回答中所说,您可以轻松地为此创建自定义函数。我将使用Lodash功能而不是香草JavaScript来演示它的工作原理:

函数getFirst(项目、路径){ const notFound=符号(“未找到”); 返回(路径) .map(路径=>\获取(项、路径、未找到)) .filter(结果=>result!==notFound) .first(); } 常量对象={ a:{ b:{ c:42 } }, x:{ y:1 }, z:2 }; log(getFirst(obj,['g']); log(getFirst(obj,['g','h','z']); log(getFirst(obj,['g','h','a.b.c','z'])
Lodash中没有内置函数允许这样做(遗憾的是)。然而,正如他在回答中所说,您可以轻松地为此创建自定义函数。我将使用Lodash功能而不是香草JavaScript来演示它的工作原理:

函数getFirst(项目、路径){ const notFound=符号(“未找到”); 返回(路径) .map(路径=>\获取(项、路径、未找到)) .filter(结果=>result!==notFound) .first(); } 常量对象={ a:{ b:{ c:42 } }, x:{ y:1 }, z:2 }; log(getFirst(obj,['g']); log(getFirst(obj,['g','h','z']); log(getFirst(obj,['g','h','a.b.c','z'])
如果
'anotherKey'
是一个简单的例子(你不需要Lodash使用
.get
语法来解析它),那么你只需要做
get(myVar,'someKey',myVar.anotherKey)
@VLAZ这是一个简化的例子——想象一下这会更复杂。我想知道是否有一种方法可以进行复杂的查找(例如,
get(myVar,'a.b.c','e.f.g')
)好的,我现在知道了。我不知道“cleaner”这个词,但是你可以从Lodash的内置函数中组装一个函数,为你做一系列的查找。如果
'anotherKey'
是一个普通的函数(你不需要Lodash使用
.get
语法来解析它),那么你可以只做
get(myVar'someKey',myVar.anotherKey)
@VLAZ这是一个简化的例子——想象一下这会更复杂。我想知道是否有一种方法可以进行复杂的查找(例如,
get(myVar,'a.b.c','e.f.g')
)好的,我现在知道了。我不知道“cleaner”这个词,但是你可以从Lodash的内置函数中组装一个函数,为你做一系列的查找。或者甚至是一个自定义函数。只需稍加注意-
。.get(obj,path)
可能会返回错误值,即使路径存在。如果这是不需要的(也可能没问题),那么您需要额外的处理,但应该可以很容易地使用
.has
进行检查,只是需要一点注意-
.get(obj,path)
可能返回错误的值,即使路径存在。如果这是不需要的(并且可能是可以的),那么您需要额外的处理,但应该可以很容易地使用
\uhas