受限 JavaScript Array Pop Polyfill 不工作

Restricted JavaScript Array Pop Polyfill not working

我正在为我正在使用的编译器创建一些特定的函数,但是编译器性质中的某些限制将阻止我使用本机 JavaScript 方法,如 Array.prototype.pop() 来执行数组流行...

所以我决定尝试编写一些基本的伪代码来尝试模仿该过程,然后将我的最终功能基于伪代码...但是我的测试似乎失败了...基于编译器当前的行为,它只允许我使用 array.length,数组元素赋值,仅此而已……我的代码在下面……

pop2 = function(arr) {
    if(arr.length>0){
        for(var w=undefined,x=[],y=0,z=arr.length;y<=z;y++){
            y+1<z?(x[y]=arr[y]):(w=arr[y],arr=x);
        }
    }
    return w;
}
Arr = [-1,0,1,2];

// Testing...
console.log(pop2(Arr)); // undefined... should be 2
console.log(Arr); // [-1,0,1,2]... should be [-1,0,1]

我试图模仿 pop 函数的性质,但似乎无法弄清楚是什么导致函数仍然提供 undefined 和原始数组...如果发送初始空数组,undefined 应该只 return,就像您期望的 [].pop() 调用一样...

有人知道我如何调整此代码以正确模仿流行音乐吗?

虽然我听说 arr.splice(array.length-1,1)[0]; 可能有效...编译器目前无法确定 splice 或类似方法...是否可以使用以下变体来实现我的代码?

提前致谢...

通过此修改,它有效:

http://jsfiddle.net/vxxfxvpL/1/

pop2 = function(arr) {
    if(arr.length>0){
        for(var w=undefined,x=[],y=0,z=arr.length;y<=z;y++){
            if(y+1<z) {
                (x[y]=arr[y]);
            } else { 
                (w=arr[y],arr=x);
                break;
            }
        }
    }
    return w;
}
Arr = [-1,0,1,2];

// Testing...
console.log(pop2(Arr)); // 2

现在的问题是删除最后一个元素。您应该在没有最后一个元素的情况下再次构造原始数组。您将遇到问题,因为您无法修改原始数组。这就是为什么这个任务是用 prototype 完成的(Array.prototype.pop2 也许可以帮助你)

你真是想多了[].pop()As defined in the specs[].pop()的过程是:

  1. 获取数组的长度
  2. 如果长度为0
    1. return undefined
  3. 如果长度大于0
    1. length - 1
    2. 获取商品
    3. 减少 array.length 1
    4. Return 项。

(...加上 JavaScript 引擎需要在幕后做的一些事情,例如在数组上调用 ToObject 或确保长度是一个无符号的 32 位整数。)

这可以用一个像下面的函数一样简单的函数来完成,甚至不需要循环。

function pop(array) {

    var length = array.length,
        item;

    if (length > 0) {

        item = array[length - 1];
        array.length -= 1;

    }

    return item;

}

编辑

我假设编译器的问题是根本无法理解 Array.prototype.pop。重新阅读你的 post,看起来数组有一个 pop 方法,但编译器无法判断变量是否为数组。在那种情况下,这个函数的一个更简单的版本是这样的:

function pop(array) {
    return Array.prototype.pop.call(array);
}

先试试这个,如果可行的话,速度会稍微快一些,也更稳健一些。它也是您可能需要使用的任何其他数组方法的模式。