JavaScript - 将偶数索引数组元素乘以 2 并将奇数索引元素乘以 3

Joh*_*son 3 javascript arrays

我一直在尝试编写代码,将数组的偶数索引元素乘以 2,将奇数索引元素乘以 3。

我将以下数字存储在变量 number 中,它代表一个数字数组

numbers = [1,7,9,21,32,77];
Even Indexed Numbers - 1,9,32
Odd Indexed Numbers - 7, 21, 77
Run Code Online (Sandbox Code Playgroud)

请记住,数组是零索引的,这意味着编号从 0 开始。在这种情况下,0-Indexed 元素实际上是 1,而 1-Indexed 元素是 7。

这是我期望的输出

[2,21,18,63,64,231]
Run Code Online (Sandbox Code Playgroud)

不幸的是,我得到了这个输出

[2,14,17,42,64,154]
Run Code Online (Sandbox Code Playgroud)

这是我的方法的代码

numbers = numbers.map(function(x) {
  n = 0;
  while (n < numbers.length) {
    if (n % 2 == 0) {
      return x * 2;
    }
    else {
     return x * 3;
    }
    n++;
  }});
return numbers;
Run Code Online (Sandbox Code Playgroud)

在这里,我创建了一个 while 循环,它为变量 n 的每次迭代执行代码。对于变量 n 的每个值,我都在检查 n 是否为偶数,它被代码 n % 2 == 0 使用。虽然 0 % 2 == 0 是真的,但 1 % 2 == 0 不是真的. 我在 while 循环结束时递增 n,所以我不明白为什么我收到了我所做的输出。

任何帮助将不胜感激。

the*_*eye 7

n通过执行创建了一个名为 的全局属性

n = 0;
Run Code Online (Sandbox Code Playgroud)

进而,

while (n < numbers.length) {
    if (n % 2 == 0) {
        return x * 2;
    } else {
        return x * 3;
    }
}
n++;    // Unreachable
Run Code Online (Sandbox Code Playgroud)

你总是立即返回。所以,n++永远不会增加。因此,n始终保持为 0,因此所有元素都乘以2始终。

Array.prototype.map的回调函数的,第二个参数是指数本身。所以,正确的使用方法map是,像这样

numbers.map(function(currentNumber, index) {
    if (index % 2 === 0) {
        return currentNumber * 2;
    } else {
        return currentNumber * 3;
    }
});
Run Code Online (Sandbox Code Playgroud)

同样可以简洁地写成,用三元运算符,像这样

numbers.map(function(currentNumber, index) {
    return currentNumber * (index % 2 === 0 ? 2 : 3);
});
Run Code Online (Sandbox Code Playgroud)