用JavaScript在一个数组中插入另一个数组

给一个数组, 将另一个数组插入其指定位置, 用ES5和ES6语法分别如何实现.

比如给数组[3,4], 要在位置1插入数组[1,2], 要得到的结果是[3,1,2,4].


说道插入,最先想到的就应该是Arrarysplice方法了.语法如下

array.splice(start, deleteCount[, item1[, item2[, ...]]])


但是问题在于,要添加元素需要用参数的形式加入,如何能把数组展开成参数(迭代每次加一个显然没有充分利用这个方法).这个方法会修改数组本身.
start表示数组从哪一位开始修改,超过长度则视为数组末尾,接受负数参数表示从末尾开始计数.
deleteCount表示从start开始(包括start)要删除的元素个数,超过后面元素的总数则删除后面所有.
itemN是要加进数组的元素,可以不指定.
返回值是被删除元素的数组,没有则返回空数组.


群内的大神们给出的解答如下:
ES6中引入了一种Spread操作符...,他后面接一个Iterator对象,可以满足上面的要求.
也就是说我们可以这样解决这个问题:

//原数组
var a = [3,4];
//要插入的数组
var b = [1,2];
//要插入的位置
var i = 1;
//插入
a.splice(i,0,...b);
//结果 a = [3, 1, 2, 4]


而在ES5中不支持这样的写法,又要如何实现呢?

其实我们可以很容易联想到我们的需求和callapply之间的差异很像.用apply可以实现将参数用数组的方式绑定到执行的方法上面.于是,我们可以把所有需要的参数放进一个数组里面,然后用apply.

//原数组
var a = [3,4];
//要插入的数组
var b = [1,2];
//要插入的位置
var i = 1;
//插入
a.splice.apply(a,[i,0].concat(b));
//结果 a = [3, 1, 2, 4]

 


结合callapply,灵活使用JS原生对象上的一些方法,往往只需要很短的代码就能实现很多要求,需要多看,多写,多联想.

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值