所以我有以下数组
[true,true,false,false,false,true,false,false,true,true].如何使用ramda使数组看起来如下
[true,false,true,false,true]另外,如果数据是
[{t: '2018-10/09', v:true},{t: '2018-10/08', v:true}, {t: '2018-10/07', v:false},{t: '2018-10/06', v:false},{t: '2018-10/05', v:false},{t: '2018-10/04', v:true},{t: '2018-10/03', v:false},{t: '2018-10/02', v:false},{t: '2018-10/01', v:true},{t: '2018-09/09', v:true}]我只想使用v,然后使用dropRepeats (bool.v)?另外,我还使用R.pipe获取输入并对数据进行转换。
发布于 2018-11-09 21:02:58
Ramda恰好有一个内置的函数,dropRepeats。
const bools = [true,true,false,false,false,true,false,false,true,true]
console.log(R.dropRepeats(bools))<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
更新
一条评论问我如何在稍微复杂的结构上做到这一点。使用dropRepeatsWith和eqProps,这将是完全相同的:
const bools = [{t: '2018-10/09', v:true},{t: '2018-10/08', v:true}, {t: '2018-10/07', v:false},{t: '2018-10/06', v:false},{t: '2018-10/05', v:false},{t: '2018-10/04', v:true},{t: '2018-10/03', v:false},{t: '2018-10/02', v:false},{t: '2018-10/01', v:true},{t: '2018-09/09', v:true}]
console.log(R.dropRepeatsWith(R.eqProps('v'), bools))<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
发布于 2018-11-09 20:49:34
我建议一个使用groupWith的解决方案
使用groupWith将连续的相同元素分组为子数组,然后在map中使用head获取每个子数组的第一个元素。
const prune = R.pipe(R.groupWith(R.equals), R.map(R.head));
console.log(
prune([true,true,false,false,false,true,false,false,true,true]));<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
https://stackoverflow.com/questions/53232756
复制相似问题