Javascript 修改函数中嵌套循环中的数组

Javascript 修改函数中嵌套循环中的数组,javascript,arrays,function,Javascript,Arrays,Function,我想我对JavaScript中的变量作用域有些误解。目标是,给定一个数字数组,生成一个包含该数组所有旋转的二维数组。因此,数组[1,2,3,4]应产生以下2D数组: [ [1,2,3,4],[2,3,4,1],[3,4,1,2],[2,3,4,1] ] 我来自Ruby,在Ruby中,以下内容可以很好地工作: row = [3,1,6,4]; function rotations(arr) { var rotations = []; var i = 0; var k = arr.l

我想我对JavaScript中的变量作用域有些误解。目标是,给定一个数字数组,生成一个包含该数组所有旋转的二维数组。因此,数组[1,2,3,4]应产生以下2D数组:

[ [1,2,3,4],[2,3,4,1],[3,4,1,2],[2,3,4,1] ]
我来自Ruby,在Ruby中,以下内容可以很好地工作:

row = [3,1,6,4];

function rotations(arr) {
  var rotations = [];
  var i = 0;
  var k = arr.length;
  while(i < k) {
    arr.unshift(arr.pop());
    rotations.push(arr);
    i++;
  };
  return rotations;
};

console.log(rotations(row));

因此,原始数组
似乎未在函数范围内修改-仅在嵌套的
while
循环的范围内修改。

您只需在使用unshift修改数组之前复制数组,因为它会修改原始数组

var行=[3,1,6,4];
功能旋转(arr){
var旋转=[arr];
var i=1;
var k=阵列长度;
var copiedArr=arr
而(ilog(旋转([1,2,3,4])
在使用unshift修改数组之前,只需复制数组,因为它会修改原始数组

var行=[3,1,6,4];
功能旋转(arr){
var旋转=[arr];
var i=1;
var k=阵列长度;
var copiedArr=arr
而(ilog(旋转([1,2,3,4])
非常好,这很有意义!非常感谢。太好了,这很有道理!非常感谢你。
[ [ 3, 1, 6, 4 ], [ 3, 1, 6, 4 ], [ 3, 1, 6, 4 ], [ 3, 1, 6, 4 ] ]