说我有两个数组:
const data = [1, 2, 3, 4]
const predicateArray = [true, false, false, true]
我希望返回值为:
[1, 4]
到目前为止,我已提出:
pipe(
zipWith((fst, scnd) => scnd ? fst : null)),
reject(isNil)
)(data, predicateArray)
是否有更干净/内置的方法?
Ramda中的解决方案是首选。
答案 0 :(得分:4)
这适用于原生JS(ES2016):
const results = data.filter((d, ind) => predicateArray[ind])
答案 1 :(得分:2)
如果您因某种原因确实需要Ramda解决方案,那么richsilv的答案变体很简单:
R.addIndex(R.filter)((item, idx) => predicateArray[idx], data)
Ramda在其列表函数回调中没有包含index
参数,原因很简单,但是addIndex
会插入它们。
答案 2 :(得分:0)
根据要求,ramda.js
:
const data = [1, 2, 3, 4];
const predicateArray = [true, false, false, true];
R.addIndex(R.filter)(function(el, index) {
return predicateArray[index];
}, data); //=> [2, 4]
更新示例以修复评论中引用的问题。