按 Ramda.js 复合 AND 条件拒绝数组项
Reject array items by Ramda.js composite AND condition
我想 reject
使用 Ramda.js
库排列项目。
有两个属性等于0
的物品需要移除。
是否可以使用普通 Ramda.js
函数来实现 without lambdas
?
我希望收到名称为 A, B, C
的商品(除了 D
,其中 acc
和 bal
都等于 0
),但是我的示例 returns A, C
.
const arr = [
{
name: 'A',
acc: 1,
bal: 2,
},
{
name: 'B',
acc: 3,
bal: 0,
},
{
name: 'C',
acc: 0,
bal: 4,
},
{
name: 'D',
acc: 0,
bal: 0,
}
]
const filteredItems = R.reject(
R.and(
R.propEq('acc', 0),
R.propEq('bal', 0)
)
)(arr)
这是Ramda REPL to test my example
提前感谢您的帮助!
在 Ramda 库中,R.and
方法 returns 一个布尔值,相比之下,R.reject
方法期望使用一个可迭代对象来遍历提供的数组。您可以使用 R.allPass
方法实现此目的。此方法采用谓词数组(如 R.propEq
)和 returns 一个使用 "AND" 逻辑组合它们的谓词。
R.reject(
R.allPass([
R.propEq('acc', 0),
R.propEq('bal', 0)
])
)(arr);
注意:如果要使用"OR"逻辑,可以使用R.anyPass
代替。
使用 R.allPass
/R.both
和 R.propEq
的替代方法是 R.where
,它需要 "spec object" 和 returns true 如果所有属性满意。
R.reject(R.where({
acc: R.equals(0),
bal: R.equals(0)
}))
我想 reject
使用 Ramda.js
库排列项目。
有两个属性等于0
的物品需要移除。
是否可以使用普通 Ramda.js
函数来实现 without lambdas
?
我希望收到名称为 A, B, C
的商品(除了 D
,其中 acc
和 bal
都等于 0
),但是我的示例 returns A, C
.
const arr = [
{
name: 'A',
acc: 1,
bal: 2,
},
{
name: 'B',
acc: 3,
bal: 0,
},
{
name: 'C',
acc: 0,
bal: 4,
},
{
name: 'D',
acc: 0,
bal: 0,
}
]
const filteredItems = R.reject(
R.and(
R.propEq('acc', 0),
R.propEq('bal', 0)
)
)(arr)
这是Ramda REPL to test my example
提前感谢您的帮助!
在 Ramda 库中,R.and
方法 returns 一个布尔值,相比之下,R.reject
方法期望使用一个可迭代对象来遍历提供的数组。您可以使用 R.allPass
方法实现此目的。此方法采用谓词数组(如 R.propEq
)和 returns 一个使用 "AND" 逻辑组合它们的谓词。
R.reject(
R.allPass([
R.propEq('acc', 0),
R.propEq('bal', 0)
])
)(arr);
注意:如果要使用"OR"逻辑,可以使用R.anyPass
代替。
使用 R.allPass
/R.both
和 R.propEq
的替代方法是 R.where
,它需要 "spec object" 和 returns true 如果所有属性满意。
R.reject(R.where({
acc: R.equals(0),
bal: R.equals(0)
}))