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.pipe
和 R.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>
是否有任何内置的 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.pipe
和 R.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>