Lodash.get在Ramda中的等效项

时间:2019-12-05 16:17:34

标签: javascript ramda.js

是否有内置的Ramda函数来检索以字符串形式给出路径的值?喜欢:

R.path('a.b', {a: {b: 2}}); // I want to get 2

我知道path可以通过使用数组来实现,例如:

R.path(['a', 'b'], {a: {b: 2}});

我可以用.分割路径,然后使用它,但是在执行此操作之前,我想知道是否已有像lodash.get这样的功能可用。

1 个答案:

答案 0 :(得分:1)

Ramda不能像lodash那样处理字符串路径。但是,您可以使用R.pipeR.split生成非常接近的函数。拆分用于将带有点(.)和方括号的数组转换为R.path可以处理的数组。

注意:这是一个非常幼稚的实现,由于JS中的valid object key,它在各种情况下都将失败。例如,像这样['a.b']的边缘情况-从看起来像这样的a.b的对象获取属性{ 'a.b': 5 }。要处理极端情况,您必须实现类似于lodash内部的stringToPath()函数。

const { pipe, path, split } = R;

const pathString = pipe(split(/[[\].]/), path);

const result = pathString('a.b')({a: {b: 2}});

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>