【问题标题】:How do I shift an array of items up by 4 places in Javascript如何在Javascript中将一组项目向上移动4个位置
【发布时间】:2010-12-04 00:17:50
【问题描述】:

如何在 Javascript 中将一组项目向上移动 4 个位置?

我有以下字符串数组:

var array1 = ["t0","t1","t2","t3","t4","t5"];

我需要一个函数将“array1”转换为:

// Note how "t0" moves to the fourth position for example
var array2 = ["t3","t4","t5","t0","t1","t2"];  

提前致谢。

【问题讨论】:

  • 这是旋转,而不是移动
  • +1 Peter b/c 我认为这是精确度(使用正确的词) 很重要的情况。 Array.shift() 已经定义了在 JavaScript 上下文中移动数组的含义。也就是说,这是一个用于旋转数组的 JS 函数。 stackoverflow.com/a/1985471/740639

标签: javascript arrays shift


【解决方案1】:
array1 = array1.concat(array1.splice(0,3));

在 Firebug 中运行以下命令进行验证

var array1 = ["t0","t1","t2","t3","t4","t5"];
console.log(array1);
array1 = array1.concat(array1.splice(0,3));
console.log(array1);

结果

["t0", "t1", "t2", "t3", "t4", "t5"]
["t3", "t4", "t5", "t0", "t1", "t2"]

【讨论】:

  • 作为一个函数-function reorderArray(arr, startIndex, howMany) { return arr.concat(arr.splice(startIndex,howMany)); } 也需要错误检查:)
  • 请注意,Array.concat() 使用源数组中的元素创建一个全新的数组。适合小型阵列,但需要考虑。
【解决方案2】:

你可以slice数组然后join它以相反的顺序:

var array2 = array1.slice(3).concat(array1.slice(0, 3));

【讨论】:

  • 这很好而且简洁。如果您要经常执行此操作,并且需要将其移动不同的数量,则可以将其放入一个函数中并传入一个变量以插入 3 所在的位置。 (我犹豫地使用“shift”这个词,因为那也是一种 Javascript 数组方法。)
  • 是的,这是我最喜欢的答案,太好了!
  • 这很棒,因为它不会修改array1。
【解决方案3】:
function shiftArray(theArray, times) {
    // roll over when longer than length
    times = times % theArray.length;
    var newArray = theArray.slice(times);
    newArray = newArray.concat(theArray.slice(0, times));
    return newArray;
}

var array1 = ["t0","t1","t2","t3","t4","t5"];
var array2 = shiftArray(array1, 3);
alert(array2); // ["t3","t4","t5","t0","t1","t2"]

【讨论】:

    【解决方案4】:

    另一种方法是:

    var array2 = array1.slice(0);
    
    for (var i = 0; i < 3; i++) {
        array2.push(array2.shift());
    }
    

    【讨论】:

      【解决方案5】:

      另一种方法 - 将以下代码粘贴到大型 Firebug 控制台中以确认它可以正常工作:

      var a = [0, 1, 2, 3, 4, 5];
      for (var i = 0; i < 3; i++) {
          a.unshift(a.pop());
      }
      // the next line is to show it in the Firebug console; variable "a" holds the array
      a.toString(",");
      

      【讨论】:

      • @Nathan:最终结果一个数组,保存在变量“a”中;将其作为字符串输出的行用于说明目的,这就是为什么它没有分配给任何东西(它直接进入 Firebug 中的控制台)。我会更正我的答案,以明确我的意思是 Firebug 控制台......有时我忘记它不是浏览器内置的 ;-)
      猜你喜欢
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多