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;iconst数组=[“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”改变给定数组的旋转:我在答案中添加了这个变量。