数组添加、移除、替换项可以很轻松的用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);