JavaScript - for 循环与数组移位

标签 javascript arrays function for-loop shift

我有两个函数,它们看起来很相似,但我不太明白的是在 for 内部时-loop,既然输入是一个数组,为什么数组不需要任何索引来调用第一个数组?

我有一系列...

var puzzlers = [
function(a) { return 8 * a - 10; },
function(a) { return (a - 3) * (a - 3) * (a - 3); },
function(a) { return a * a + 4; },
function(a) { return a % 5; }
];

我正在尝试使用输入循环遍历数组。然后第一个函数的结果将用作下一个函数的输入,然后将删除第一个数组。

这是我写的...
function applyAndEmpty(input, queue)
{
    var length = queue.length;
    for(var i = 0; i < length; i++)
    {
        input = queue[0](input);
        queue.shift();
    }
    return input;
}

上面确实给了我答案,但后来我发现还有另一种写法是
var applyAndEmpty = function(input, queue)
{
    var length = queue.length;
    for(var i = 0; i < length; i++)
    {
        input = queue.shift()(input);
    }
    return input;
};

我不明白的是部分input = queue.shift()(input) .
queue 不是吗?需要索引吗?

最佳答案

所以你基本上是在问什么 shift做,你去:
您可以使用 for(var i=0; 做什么...您可以使用 shift() (非常相似但不是!)
使用 for循环(和 index)

var array = [
  function(){return "a";},
  function(){return "b";}
];
  
for(var i=0; i<array.length; i++){
    console.log( array[i]() );  
    // "a"
    // "b"
}

console.log(array.length); //2       !!Still there!!!

使用 shift() (例如 while)

var array = [
  function(){return "a";},
  function(){return "b";}
];
  
while(array.length){                // while array has length
    console.log( array.shift()() );  // execute and remove from array
    // "a"
    // "b"
}

console.log(array.length); //0   !!!Empty array due to shift()!!!

所以基本上它从你的数组中删除一个键并返回它。
只要该数组有键,它就会循环直到它为空。
两者之间的区别是巨大的:
for示例 1 中的循环。将循环但不会更改您的原始数组。
使用 shift()在示例 2 中。你正在(使用和)删除 你的数组键一个一个。
阅读有关数组操作的更多信息:
Array.prototype.shift 1 <-- [2,3,4] Array.prototype.unshift 5 --> [5,2,3,4] Array.prototype.push [5,2,3,4,6] <-- 6 Array.prototype.pop [5,2,3,4] --> 6和其他方法

关于JavaScript - for 循环与数组移位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40009556/

相关文章:

c++ - 将指针传递给函数并修改它

c - 当我尝试将函数的参数设置为默认时发生意外错误

javascript - className条件不是动态的?

javascript - 同位素/masonry 图像在调整大小时重叠

javascript - GatsbyJS 和 Contentful : data coming up undefined

arrays - 深度克隆 Moose 对象,其属性为 ArrayRef[Object] 和 Set::Object

c++ - 将 2d char 数组转换为 char*

c - 与**字符**一起使用时作为参数的数组 VS 与**整数**一起使用时

javascript - 将一个 javascript 函数的结果集成到另一个

javascript - 在 Node.JS 中使用回调时 "return;"是否必要/有帮助?