如何添加到一个数组在Javascript中插入一个数字和数字后移动到右边
How to add to an array in Javascript by inserting a number and moving the numbers after to the right
我试图插入一个值到数组中。我没有改变数组的大小。我所要做的就是插入一个值,然后使用以下算法将插入后的所有数字向右移动:
-
转到数组的最后一个元素n = (length-1)
-
如果不是传递的索引(n> index),则将其值设置为前一个元素的值A(n) = A(n-1)
-
如果是传递的索引(n = index),则设置为传递的值A(n) = value,退出
-
左移一个元素n = n-1
-
重复步骤2、3、4
我该怎么做?此外,我不能使用任何内置数组函数。下面是我的Javascript代码的一个例子:
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);
您非常接近,但做的日志比需要的多。希望这些注释是足够的:
// Just use simple test cases initially
var array = [0,1,2,3];
// The original function had some unused and pointless variables,
// they're removed
function insertIntoArray(array, index, value){
// Don't allow index to be greater than length - 1
if (index > array.length - 1) return;
// Loop until the required index is reached, shifting
// values to the next higher index
for(var move = array.length - 1; move > index; move--) {
array[move] = array[move - 1];
}
// Must now have reached required index and have shifted
// values, so just insert
array[index] = value;
}
// Original array
document.write(array + '<br>');
// Do insert
insertIntoArray(array, 2, 15);
// Modified array
document.write(array);
注意,你可以有稀疏数组,上面的代码将在这样的数组中创建新的元素,所以它们不再是稀疏的。此外,对于大型数组,它将非常低效,Barmar的splice + slice答案在这方面可能更好,尽管它确实改变了长度。
您可以在index
处将数组分为左数组和右数组,将项添加到左数组中,并从右数组中删除最后一项。然后组合两个数组:
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);
}
<<p> 小提琴例子/strong>。注意,使用return
是为了改变给定数组的值,而不是本地array
值。简单地改变函数中的array
不会改变全局的array
变量
循环的问题是您使用的是array[i] = array[i-1]
,但循环中的索引变量是move
,而不是i
。
您不需要在循环中执行if
。只要在循环完成后插入新元素即可。你在else
中也有一个语法错误——你没有在else
之后放一个测试,它自动与if
相反。
function InsertIntoArray(array, index, number) {
// Move all the elements after index up by 1
for (var move = array.length - 1; move > index; move--) {
array[move] = array[move - 1];
}
// Insert the new element
array[index] = number;
}
var array = [];
for (var i = 1; i <= 30; i++) {
array.push(i);
}
document.getElementById("before").textContent = JSON.stringify(array);
InsertIntoArray(array, 1, 11);
document.getElementById("results").textContent = JSON.stringify(array);
<b>Before:</b>
<div id="before"></div>
<b>After:</b>
<div id="results"></div>
相关文章:
- 递增一个数字而不去掉前导零
- 如何为jQuery屏蔽输入插件创建一个允许字母数字、空格和重音字符的掩码
- 我想在AngularJS应用程序中创建一个输入数字框,用户不应该在该框上键入十进制数字.(一个整数输入框)
- 制作一个regex来验证只有一个数字的字符串
- 如何限制一个字段只接受4个数字字符作为输入,并获得'It’这是潜水警报
- 为什么这个正则表达式不't匹配最后一个字母数字字符
- 一个jquery验证器方法,它不接受纯数字或纯特殊字符,但接受上面是否有字母
- 如何拆分一个整数和产生的所有数字来创建一个新数字
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 当与另一个实例进行比较时,我的类实例如何隐式返回数字
- 简单的Javascript方式,在输入字段的每5位数字后添加一个空格
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- PHP函数识别3个数字中最低的一个并更改其类
- 我如何解析二's是一个数字的补码字符串
- 为什么我需要在这里输入var,为什么它会给我一个数字作为答案?(Javascript)
- 在我的网站上创建一个在1-10之间不断变化的数字时遇到了问题.Javascript
- 如何获取一个以零开头的数字的位数
- 如何创建一个确定2个数字之间值的函数
- 当我添加一个新数字时,如何获得一些数字的即时平均值
- 为什么 JavaScript 如果一个数字有一个前导零,就将其视为八进制