欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js在数组的任意位置连接数组(代码实例)

程序员文章站 2023-10-31 22:41:04
今天撸我的公众号的时候,有一个需求,其中需要我在一个数组的任意地方插入一个数组,然后使得插入后的数组仍然是个一维数组,说的有点绕,举个栗子 arr1 = [1,2,5] a...

今天撸我的公众号的时候,有一个需求,其中需要我在一个数组的任意地方插入一个数组,然后使得插入后的数组仍然是个一维数组,说的有点绕,举个栗子

arr1 = [1,2,5]
arr2 = [3,4]
//连接这两个数组之后
arr1 = [1,2,3,4,5]
arr2 = [3,4]

我们都知道array.concat()可以连接两个数组,但是在这里根本不能用,因为它是从后面接的.不符合要求,所以我决定自己撸一个

array.prototype.insertsome = function(place, thing) {
	// 向数组插入元素, place是位置(整数) thing是要插入的数据
	if(thing instanceof array) {
		var alllen = this.length + thing.length; //合并数组后的长度
		var thinglen = thing.length; //要插入的数组长度
		var thislen = this.length; //被插入数组的长度
		for(var i = alllen; i > place + thinglen; i--) {
			// 先把原来数组在place后面的元素移去后方;
			this[i - 1] = this[thislen - 1];
			thislen--;
		}
		for(var k = i - 1; k > thislen - 1; k--) {
			// 再把要插入的数组从尾到头插入原来的数组
			this[k] = thing[thinglen - 1];
			thinglen--;
		}
	} else {
		// 如果thing不是个数组,那么用splice就行了
		this.splice(place, 0, thing);
	}
}

大概思路是这样,比如有[1,2,3,4,5]这个数组,我想在3后面插入[6,7,8,9,10],那么我先延长数组,把3后面的4和5放到指定位置先(延长之后的数组长度是10,于是arr[9]=5;arr[8]=4;),然后再把,[6,7,8,9,10]按倒序插进去, 最后的结果是[1,2,3,6,7,8,9,10,4,5].

虽然到这里任务是完成了,可以用, 但是我总有种感觉可以继续优化,如果数组长度为一亿呢?我应该怎么做才更省时间

今天先记录到这里,以后有想法了再更新.

以上!