Javascript 基于另一个布尔数组筛选数组
假设我有两个数组:Javascript 基于另一个布尔数组筛选数组,javascript,arrays,lodash,ramda.js,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解决方案。这适用于本机JS(E
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解决方案。这适用于本机JS(ES2016):
这适用于本机JS(ES2016):
按照要求,使用
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]
更新了示例,以修复注释中引用的问题。根据要求,使用
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]
更新了示例,以修复注释中引用的问题。如果出于某种原因确实需要Ramda解决方案,richsilv的答案变体非常简单:
R.addIndex(R.filter)((item, idx) => predicateArray[idx], data)
出于某些原因,Ramda在其列表函数回调中不包含
索引
参数,而是插入它们。如果出于某些原因确实需要Ramda解决方案,richsilv的答案变体非常简单:
R.addIndex(R.filter)((item, idx) => predicateArray[idx], data)
Ramda在其列表函数回调中不包含
索引
参数,这是有充分理由的,但会插入它们。如果数据数组包含重复值,这将不起作用,因为indexOf将只返回第一个索引如果数据数组包含重复值,这将不起作用,as indexOf将只返回第一个indexNice解决方案!你能分享一些关于为什么索引没有被包括在内的原因吗?我恐怕这里讨论的太多了,但是你可以看到相关的Ramda问题:(有争议的),以及很好的解决方案!你能再分享一下为什么不包括该指数的原因吗?恐怕这里讨论的内容太多了,但你可以看到相关的拉姆达问题:(有争议的),和