js不用splice实现数组的添加项功能

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

 

猜你喜欢

转载自boyp.iteye.com/blog/2340743