Javascript 创建一个函数,将整数数组旋转给定的步数

Javascript 创建一个函数,将整数数组旋转给定的步数,javascript,arrays,sorting,Javascript,Arrays,Sorting,所以我做了一件事: function rotate(array, [steps]){ var array_length = array.length; var real_steps = 1; var new_array = []; if (typeof steps !== 'undefined') { real_steps = steps; } else { steps = 1; } i

所以我做了一件事:

function rotate(array, [steps]){
    var array_length = array.length;
    var real_steps = 1;
    var new_array = [];
    if (typeof steps !== 'undefined')
    {
        real_steps = steps;
    }
    else
    {
    steps = 1;  
    }

    if (real_steps > array_length)
    {
        real_Steps = steps % array_length;
    }
    else if (real_steps < 0)
    {
        if (real_steps % 2)
        {
            real_steps = real_steps*(-1)+2;
        }
        else
        {
            real_steps = real_steps*(-1);   
        }
        real_steps = steps % array_length;
    }

    else if (real_steps === 0)
    {
        return array;
    }
    for(var i=0; i<=array_length-real_steps; i++)
        new_array[i] = array[i+real_steps];
    for(var i=array_length-real_steps; i<array_length-real_steps;i++)
        new_array[i] = array[i];
    return new_array
}
不起作用。代码本身有一个问题,我认为是由未定义的[steps]抛出异常引起的,但如果我不能自己测试它,我无法确定问题是什么

如何测试函数的输出

更详细地说,在现阶段,我的函数是否有任何明显的问题?

const array=[“a”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“I”、“J”、“K”、“L”];
const array = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L"];
let newArray = [];

function rotate(array, steps){
    for(i=0; i<array.length ; i++){
        if(i+steps < array.length){
            newArray.push(array[i+steps]);
        } else {
            newArray.push(array[i+steps-array.length])
        }
    }
}

rotate(array, 3);
console.log(newArray);
设newArray=[]; 函数旋转(数组、步数){ 对于(i=0;i
const数组=[“A”、“B”、“C”、“D”、“E”、“F”、“G”、“H”、“i”、“J”、“K”、“L”);
设newArray=[];
函数旋转(数组、步数){

对于(i=0;i,函数返回新的旋转数组,因此必须将结果指定给以下内容:

a = rotate(a);

该函数返回新的旋转数组,因此必须将结果指定给以下对象:

a = rotate(a);

职能中的一些问题:

  • 可选的
    step
    参数的语法不是
    [step]
    ,而是
    step
    :在JavaScript中,所有参数都是可选的。但是,您可以在参数列表中使用
    step=1
    给出默认值

  • 模2(
    %2
    )很奇怪:我看不出这对处理负阶跃有什么帮助。您可以使用以下公式处理所有阶跃值:

    steps - Math.floor(steps / array.length) * array.length
    
  • 有很多代码可以很容易地用
    slice
    concat

  • 您没有在读取函数返回值的地方提供代码。函数不改变原始数组是一种很好的做法(因此保持这种方式),但您可能希望
    a
    通过
    rotate(a)进行修改
    ?无论如何,结果是由函数返回的,因此您可以直接输出该结果或将其存储在变量中

代码:

函数旋转(数组,步长=1){//可选参数表示法不是[]
steps=steps-Math.floor(steps/array.length)*array.length;//也适用于负数
返回array.slice(steps).concat(array.slice(0,steps));
}
//演示
变量a=[1,2,3,4,5];
对于(var步骤=-6;步骤<7;步骤++){
console.log('step'+step+'=>'+旋转(a,step));
}

.as控制台包装{max height:100%!重要;top:0;}
函数中的一些问题:

  • 可选的
    step
    参数的语法不是
    [step]
    ,而是
    step
    :在JavaScript中,所有参数都是可选的。但是,您可以在参数列表中使用
    step=1
    给出默认值

  • 模2(
    %2
    )很奇怪:我看不出这对处理负阶跃有什么帮助。您可以使用以下公式处理所有阶跃值:

    steps - Math.floor(steps / array.length) * array.length
    
  • 有很多代码可以很容易地用
    slice
    concat

  • 您没有在读取函数返回值的地方提供代码。函数不改变原始数组是一种很好的做法(因此保持这种方式),但您可能希望
    a
    通过
    rotate(a)进行修改
    ?无论如何,结果是由函数返回的,因此您可以直接输出该结果或将其存储在变量中

代码:

函数旋转(数组,步长=1){//可选参数表示法不是[]
steps=steps-Math.floor(steps/array.length)*array.length;//也适用于负数
返回array.slice(steps).concat(array.slice(0,steps));
}
//演示
变量a=[1,2,3,4,5];
对于(var步骤=-6;步骤<7;步骤++){
console.log('step'+step+'=>'+旋转(a,step));
}

.as console wrapper{max height:100%!important;top:0;}
将整数移动给定数量的步数
这是什么意思?什么是“不工作”意思?当[steps]参数未定义时,程序抛出异常“TypeError:无法读取未定义的属性”Symbol(Symbol.iterator)”理想的功能是,如果步骤为1,[1,2,3,4]将变成[4,1,2,3]
将整数移动给定数量的步骤
这是什么意思?什么是“不工作”?当[steps]参数未定义时,程序抛出异常“TypeError:无法读取属性”符号(Symbol.iterator)“of undefined”,理想的功能是,如果步骤是1,[1,2,3,4]将变成[4,1,2,3],这是一个全面的答案,谢谢!如果我想在函数中编辑全局变量a,我只会在函数中引用它,或者我必须引用rotate()的参数“array”-函数?视情况而定。如果要将数组分配给
array
,则全局变量不受影响,但如果更改
array[0]
,则会在全局变量中看到这一点。但实际上,最好不要从函数中修改全局变量。如果您正在查找“inplace”改变给定数组的旋转:我将此变量添加到我的答案中。这是一个全面的答案,谢谢!如果我想在函数中编辑全局变量a,我只需在函数中引用它,还是必须引用rotate()的参数“array”-函数?视情况而定。如果要将数组分配给
array
,则全局变量不受影响,但如果更改
array[0]
,则会在全局变量中看到这一点。但实际上,最好不要从函数中修改全局变量。如果您正在查找“inplace”改变给定数组的旋转:我在答案中添加了这个变量。