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

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

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

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

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

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

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

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

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

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

    回到顶部
    我要评论

    所有评论

      相关文章