一般数组逆序都是用reverse(),今天看到一个比较奇怪的逆序方法:

let a=[1,2,3,4];
a.map(a.pop,[...a])

第一个a.pop相当于Array.prototype.pop:

let a=[1,2,3,4];
a.map(function(){
    return Array.prototype.pop.call(this);
},[...a])

第二个参数[...a]则是替换第一个方法里面的this。

这里需要注意的是第二个参数要用拷贝数组,不能用原数组,如果用原数组答案就是不对的:

let a=[1,2,3,4];
a.map(function(){
    return Array.prototype.pop.call(this);
},a);
//结果[4,3,undefined,undefined]

因为这样的写法相当于边循环边pop:

let a=[1,2,3,4];
a.forEach(function(){
    let p=a.pop();
    console.log(p);
});

也就是说a.map相当于遍历数组,如果这个时候pop数组,那么就会导致无法完整遍历整个数组,有些内容被pop掉了。

回到顶部
我要评论

所有评论

返回
邮箱:
绑定
取消
×

我要评论

回复:

昵称:(昵称不超过20个字)

图片:

邮箱:
绑定邮箱后,若有回复,会邮件通知。
提交
还可以输入500个字