javascript - 相当于旋转的 ramda

标签 javascript ramda.js

给定如下所示的旋转函数,该函数将数组旋转一定数量的槽。

是否有等效的 Ramda.js 函数或组合可以执行此旋转?

var test = [1,2,3,4,5,6,7,8,9];
function rotate(arr, count) {
    arr = arr.slice();
    while (count < 0) {
      count += arr.length;
    }
    count %= arr.length;
    if (count) {
      arr.splice.apply(arr, [0, 0].concat([].slice.call(arr.splice(arr.length - count, count))));
    }
    return arr;
}

示例

rotate(test, 2) // -> [8, 9, 1, 2, 3, 4, 5, 6, 7]

最佳答案

这是一个无点单行代码,它首先考虑计数,其次是数据,与 ramda 的可组合风格一致:

const rotate = pipe(splitAt, reverse, flatten);

当然,您始终可以翻转(旋转) 以获得数据优先版本。

更新

抱歉,我读得太快了,并假定了正常的、向左的旋转方向(例如,在 ruby​​ 中)。这是按照您的原始想法所做的想法的变体:

const rotate = pipe(useWith(splitAt, [negate, identity]), reverse, flatten);

关于javascript - 相当于旋转的 ramda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30644326/

相关文章:

javascript - Promise.resolve 对象不是构造函数

javascript - 使用 javascript 生成并下载带有表情符号的 utf8 文件

javascript - 函数式编程 : list conditional branching/filtering (Javascript)

javascript - JavaScript 的 FilterWithKeys?

javascript - 从一个未柯里化(Currying)的函数组成一个函数

javascript - 用 javascript 构建通知中心

javascript - 如何检查javascript数组中是否存在键?

javascript - 将 javascript 添加到 HTML 文件并使用文档就绪

javascript - 在不影响可读性的情况下同时从 'lodash' 、 'rxjs' 、 'ramda' 导入 { map }

javascript - 为什么不能将 Promise.resolve 作为函数调用?