是否有内置的Ramda函数来检索以字符串形式给出路径的值?喜欢:
R.path('a.b', {a: {b: 2}}); // I want to get 2
我知道path
可以通过使用数组来实现,例如:
R.path(['a', 'b'], {a: {b: 2}});
我可以用.
分割路径,然后使用它,但是在执行此操作之前,我想知道是否已有像lodash.get这样的功能可用。
答案 0 :(得分:1)
Ramda不能像lodash那样处理字符串路径。但是,您可以使用R.pipe
和R.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>