数组添加、移除、替换项可以很轻松的用js封装好的splice来实现,但是为了锻炼自己对数据结构的算法,尝试着通过循环来实现Array的添加,以下是代码的展示部分。
在这个项目中一共有三种方式实现了添加项的功能,我一一把他们展示出来。
第一种:实现在数组里面添加一项
var a = [1, 2, 3, 5, 6],
b = 4;
Array.prototype.addToArray = function(item, index) {
if(isNaN(index) || index > this.length || index < 0) {
return false;
}
var current = this[index]; //当前值保存,并且往后推一个
this[index] = item; //this[3]=4
//i=index+1的意思是index之前的不处理,只处理index之后的项。
for(var i = index + 1, len = this.length; i <= len; i++) {
var next = this[i]; //保存index+1的值
this[i] = current; //设置当前值为current
current = next; //把next的值赋值给current
}
}
a.addToArray(b, 3);
console.log(a);//输出a
这段代码的逻辑有点复杂,于是又改版了第二版;
第二种:实现在数组里面添加一项,index后面的项都往后挪1个,空出当前的index
var a = [1, 2, 3, 5, 6],
b = 4;
Array.prototype.addToArray = function(item, index) {
if(isNaN(index) || index > this.length || index < 0) {
return false;
}
//i=len-1是获取当前数组项的索引
//i>=index是只执行index后面的数组,index之前的数组保持不动
//当前的len =5,i=5-1 4 4>3
//执行完第一次,执行第二次,i变成3, a[3+1] = a[3] 5 结束循环
for(var len = a.length, i = len - 1; i >= index; i--) {
a[i + 1] = a[i]; //a[4+1] =a[4] 6
}
a[index] = item;
}
a.addToArray(b, 3);
console.log(a);
第三种:实现数组的多个数值的添加
var a = [1, 2, 3, 5, 6],
b = 4;
//sourceArray:当前需要插入项的原始数组
//insetArray: 插入的数组
//insertIndex: 添加数组的位置
Array.prototype.addToArray = function(sourceArray, insertArray, insertIndex) {
var sourceArrayLength = sourceArray.length;//获取原始数组项的个数
var insertArrayLength = insertArray.length;//获取插入数组的个数
//i = sourceArrayLength - 1获取原始数组的索引
for(var i = sourceArrayLength - 1; i >= insertIndex; i--) {
sourceArray[i + insertArrayLength] = sourceArray[i];
//把i + insertArrayLength算出来,判断需要在中间空出多少个项
}
for(var i = 0; i < insertArray.length; i++) {
sourceArray[i + insertIndex] = insertArray[i];
把插入项的内容添加到原始的数组中
}
}
a.addToArray(a, b, 3);
console.log(a);
本文介绍了三种使用循环实现数组添加的方法,包括单个元素的添加和多个元素的批量添加,展示了如何通过修改数组索引来实现元素的正确插入。
1万+

被折叠的 条评论
为什么被折叠?



