我写了一个提取对象键的代码片段source
(应该是未知的,所以我添加了一个不存在的键baz
来提取。我提取的数组中的每个元素 - 我想添加它所在的键提取然后展平结果以获得单个数组。
我在编写代码时遇到了两个主要问题:
- 尝试使用
S.insert
时,它总是返回错误,因为对象值(数字{r:**<<number>>**}
)与我尝试添加到键的字符串类型不同Section
({'Section': **'foo'**}
例如)。我最终只是为了传达我的意图而改变了对象。 - 我没有设法编写一个适当的映射函数来抽象
Maybe
并让我访问里面的变量。所以我不得不使用S.maybeToNullable
然后将值重新包装到Maybe
. - 有没有更好的方法来表达下面写的任何逻辑
sanctuary
?
代码片段:
const S = require('sanctuary');
const source = {
foo: [{ r: 1 }, { r: 2 }, { r: 3 }],
bar: [{ r: 4 }, { r: 5 }, { r: 6 }],
}
const result =
S.pipe([
S.map(
prop => {
const nullable = S.maybeToNullable(S.value(prop)(source))
return nullable ? S.Just(nullable.map(val => {val['Section'] = prop; return val})) : S.Nothing
}
),
S.justs,
S.reduce(xs => x => [...xs, ...x])([])
])(['foo', 'bar', 'baz'])