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].
虽然到这里任务是完成了,可以用, 但是我总有种感觉可以继续优化,如果数组长度为一亿呢?我应该怎么做才更省时间
今天先记录到这里,以后有想法了再更新.
以上!