Lodash.get 在 Ramda 中等效

Lodash.get equivalent in Ramda

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

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

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

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

我可以通过 . 分割路径然后使用它,但在这样做之前我想知道是否已经有一个功能像 lodash.get.

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

注意:这是一个非常幼稚的实现,由于 valid object key in JS. For example, an edge case like this ['a.b'] - get the property a.b from an object that looks like this { 'a.b': 5 }. To handle edge cases you'll have to implement something similar to lodash's internal's 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>