You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现按指定n位旋转数组元素的rotate函数

JavaScript 数组旋转函数实现

下面是符合需求的rotate函数实现,全程不会修改传入的原数组,兼容所有类型数组元素,自动处理超长旋转位数:

function rotate(arr, n) {
  const len = arr.length;
  // 空数组直接返回空副本
  if (len === 0) return [];
  // 取模计算相对偏移量,解决旋转位数超过数组长度的问题
  const offset = n % len;
  // 将正负旋转统一换算为等效右移位数,范围落在0~len-1之间
  const rightShift = offset >= 0 ? offset : len + offset;
  // 旋转位数为0时返回原数组浅拷贝
  if (rightShift === 0) return [...arr];
  // 拼接后段和前段元素,生成旋转后的新数组
  return [...arr.slice(-rightShift), ...arr.slice(0, len - rightShift)];
}

实现说明

  • 所有操作都基于数组浅拷贝生成新数组,不会改动原始传入的数组
  • 通过取模运算自动处理任意大小的旋转位数,不管n是正数、负数还是超过数组长度,都能算出有效旋转位置
  • 仅对数组元素做浅拷贝,支持字符串、数字、布尔值、对象等任意类型的元素存储

测试用例与预期结果

基础旋转功能

const data = [1, 2, 3, 4, 5];
rotate(data, 1)  // [5, 1, 2, 3, 4]
rotate(data, 2)  // [4, 5, 1, 2, 3]
rotate(data, 3)  // [3, 4, 5, 1, 2]
rotate(data, 4)  // [2, 3, 4, 5, 1]
rotate(data, 5)  // [1, 2, 3, 4, 5]
rotate(data, 0)  // [1, 2, 3, 4, 5]
rotate(data, -1) // [2, 3, 4, 5, 1]
rotate(data, -2) // [3, 4, 5, 1, 2]
rotate(data, -3) // [4, 5, 1, 2, 3]
rotate(data, -4) // [5, 1, 2, 3, 4]
rotate(data, -5) // [1, 2, 3, 4, 5]
console.log(data) // 原数组保持不变:[1, 2, 3, 4, 5]

多类型元素兼容

rotate(['a', 'b', 'c'], 1)     // ['c', 'a', 'b']
rotate([1.0, 2.0, 3.0], 1)     // [3.0, 1.0, 2.0]
rotate([true, true, false], 1) // [false, true, true]

超长旋转位数处理

const data = [1, 2, 3, 4, 5]
rotate(data, 7)     // [4, 5, 1, 2, 3]
rotate(data, 11)    // [5, 1, 2, 3, 4]
rotate(data, 12478) // [3, 4, 5, 1, 2]

内容的提问来源于stack exchange,提问作者Riaz Bappy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:57:14