Lodash.get Ramda 中的等效项

Emi*_*Emi 5 javascript ramda.js

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

R.path('a.b', {a: {b: 2}}); // I want to get 2
Run Code Online (Sandbox Code Playgroud)

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

R.path(['a', 'b'], {a: {b: 2}});
Run Code Online (Sandbox Code Playgroud)

我可以分割路径.然后使用它,但在这样做之前我想知道是否有一个可用的函数可以像lodash.get一样工作。

Ori*_*ori 3

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

注意:这是一个非常幼稚的实现,由于JS 中有效的对象键是什么,它会在各种边缘情况下失败。例如,像这样的边缘情况-从如下所示的对象['a.b']获取属性。为了处理边缘情况,你必须实现类似于 lodash 内部函数的东西。a.b{ 'a.b': 5 }stringToPath()

const { pipe, path, split } = R;

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

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

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

  • @OriDrori:我认为没有任何理由不使用上面的版本而不是 Ramda 提供的版本。但您必须确定您的对象不包含带点的键。库无法知道这一点,但您可能会知道自己的代码库。 (2认同)