如何在Javascript中通过插入数字并将数字移到右边来添加到数组中
我试图在数组中插入一个值。我没有改变数组的大小。我只想插入一个值,然后使用以下算法将插入后的所有数字向右移动:如何在Javascript中通过插入数字并将数字移到右边来添加到数组中,javascript,arrays,Javascript,Arrays,我试图在数组中插入一个值。我没有改变数组的大小。我只想插入一个值,然后使用以下算法将插入后的所有数字向右移动: 转到数组中的最后一个元素n=(长度-1) 如果不是传递的索引(n>index),则将其值设置为前一个元素A(n)=A(n-1)的值 如果是传递的索引(n=索引),则将该值设置为传递的值A(n)=值并退出 向左移动一个元素n=n-1 重复步骤2、3和4 我该怎么做?此外,我不能使用任何内置数组函数。下面是我的Javascript代码示例: var array = []; for(var
var array = [];
for(var i=1; i<=1000; i++) {
array.push(Math.round(Math.random()*100));
}
function InsertIntoArray(array,index,number){
var numCount = 0
var move = 0 ;
for(var move = array.length - 1; move > index; move--)
{
if (move > index)
{
array[i] = array[i-1];
numCount ++;
}
else (move == index)
{
array[index] = number;
numCount++;
break;
}
}
console.log(move);
console.log(numCount);
console.log(array);
}
console.log(array);
InsertIntoArray(array, 1, 11);
var数组=[];
对于(变量i=1;i索引;移动--)
{
如果(移动>索引)
{
数组[i]=数组[i-1];
numCount++;
}
else(移动==索引)
{
数组[索引]=编号;
numCount++;
打破
}
}
控制台日志(移动);
console.log(numCount);
console.log(数组);
}
console.log(数组);
插入数组(数组,1,11);
循环的问题是您使用的是array[i]=array[i-1]
,但循环中的索引变量是move
,而不是i
您不需要在循环内执行if
。循环完成后,只需插入新元素。您在else
中也有语法错误——您没有在else
之后放置测试,它自动与if
相反
函数插入数组(数组、索引、编号){
//将索引后的所有元素上移1
对于(var move=array.length-1;move>index;move--){
数组[move]=数组[move-1];
}
//插入新元素
数组[索引]=编号;
}
var数组=[];
对于(var i=1;i循环的问题是使用的是array[i]=array[i-1]
,但循环中的索引变量是move
,而不是i
你不需要在循环中执行if
。只要在循环完成后插入新元素即可。你在else
中也有语法错误——你没有在else
之后进行测试,它自动与if
相反
函数插入数组(数组、索引、编号){
//将索引后的所有元素上移1
对于(var move=array.length-1;move>index;move--){
数组[move]=数组[move-1];
}
//插入新元素
数组[索引]=编号;
}
var数组=[];
对于(var i=1;i,您可以在索引处将数组分为左数组和右数组,将项目添加到左数组中,并从右数组中删除最后一个项目。然后将两个数组合并:
function InsertIntoArray(array,index,number){
var leftArray = array.slice(0, index);
var rightArray = array.slice(index, array.length - 1);
leftArray.push(number);
return leftArray.concat(rightArray);
}
。注意使用返回
是为了更改给定数组的值,而不是本地数组
值。只需在函数中更改数组
,将不会更改全局数组
变量。您可以在索引
中将数组分成左右两个数组,将该项添加到左侧数组,并从右侧移除最后一项。然后将两个数组合并:
function InsertIntoArray(array,index,number){
var leftArray = array.slice(0, index);
var rightArray = array.slice(index, array.length - 1);
leftArray.push(number);
return leftArray.concat(rightArray);
}
。注意:使用return
是为了更改给定数组的值,而不是本地array
值。只需在函数中更改array
将不会更改全局array
变量。您非常接近,但所做的日志超出了要求。希望注释足够:
//最初只需使用简单的测试用例
var数组=[0,1,2,3];
//原始函数中有一些未使用且无意义的变量,
//他们被移除了
函数insertIntoArray(数组、索引、值){
//不允许索引大于长度-1
if(index>array.length-1)返回;
//循环,直到达到所需的索引,换档
//值到下一个更高的索引
对于(var move=array.length-1;move>index;move--){
数组[move]=数组[move-1];
}
//现在必须已达到所需的索引并已移动
//值,所以只需插入
数组[索引]=值;
}
//原始数组
document.write(数组+“
”);
//插入
插入数组(数组,2,15);
//修改数组
document.write(array);
您非常接近,但做的日志超出了要求。希望注释足够:
//最初只需使用简单的测试用例
var数组=[0,1,2,3];
//原始函数中有一些未使用且无意义的变量,
//他们被移除了
函数insertIntoArray(数组、索引、值){
//不允许索引大于长度-1
if(index>array.length-1)返回;
//循环,直到达到所需的索引,换档
//值到下一个更高的索引
对于(var move=array.length-1;move>index;move--){
数组[move]=数组[move-1];
}
//现在必须已达到所需的索引并已移动
//值,所以只需插入
数组[索引]=值;
}
//原始数组
document.write(数组+“
”);
//插入
插入数组(数组,2,15);
//修改数组
document.write(array);
使用这种方法,你不会丢失数组中的最后一项吗?或者这就是重点。@SpencerWieczorek他说他不想增加数组的大小。所以必须做点什么。array[i]
应该是array[move]斯宾塞:这就是重点…所以基本上最后一项会被删除…例如:[1,2,3,4,5]在插入11[1,11,2,3,4]之后,你的代码看起来几乎正确,只是你的循环中没有i
变量,它应该是array[move]=array[move-1]
。用这种方法,你会不会丢失数组中的最后一个项目?或者这就是重点。@SpencerWieczorek他说他不想增加数组的大小。所以必须做点什么。array[i]
应该是array[move]
,等等。Spencer:那会