基于另一个布尔数组过滤数组

时间:2017-04-07 09:53:35

标签: javascript arrays lodash ramda.js

说我有两个数组:

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中的解决方案是首选。

3 个答案:

答案 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]

更新示例以修复评论中引用的问题。