Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-将偶数索引数组元素乘以2,奇数索引数组元素乘以3_Javascript_Arrays - Fatal编程技术网

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

JavaScript-将偶数索引数组元素乘以2,奇数索引数组元素乘以3,javascript,arrays,Javascript,Arrays,我一直在尝试编写代码,将数组的偶数索引元素乘以2,奇数索引元素乘以3 变量number中存储了以下数字,它表示一个数字数组 numbers = [1,7,9,21,32,77]; Even Indexed Numbers - 1,9,32 Odd Indexed Numbers - 7, 21, 77 请记住,数组是零索引的,这意味着编号从0开始。在这种情况下,0索引元素实际上是1,1索引元素是7 这就是我所期望的输出 [2,21,18,63,64,231] 不幸的是,我得到了这个输出 [2

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

变量number中存储了以下数字,它表示一个数字数组

numbers = [1,7,9,21,32,77];
Even Indexed Numbers - 1,9,32
Odd Indexed Numbers - 7, 21, 77
请记住,数组是零索引的,这意味着编号从0开始。在这种情况下,0索引元素实际上是1,1索引元素是7

这就是我所期望的输出

[2,21,18,63,64,231]
不幸的是,我得到了这个输出

[2,14,17,42,64,154]
这是我的方法的代码

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;
numbers=numbers.map(函数(x){
n=0;
while(n
在这里,我创建了一个while循环,它为变量n的每次迭代执行代码。对于变量n的每个值,我检查n是否为偶数,代码n%2==0使用了偶数。虽然0%2==0是真的,但1%2==0不是真的。我在while循环的末尾增加了n,所以我不明白为什么我会收到我所做的输出


任何帮助都将不胜感激。

您通过执行以下操作创建了名为
n
的全局属性

n = 0;
然后呢,

while (n < numbers.length) {
    if (n % 2 == 0) {
        return x * 2;
    } else {
        return x * 3;
    }
}
n++;    // Unreachable
使用三元运算符,同样可以简洁地编写,如下所示

numbers.map(function(currentNumber, index) {
    if (index % 2 === 0) {
        return currentNumber * 2;
    } else {
        return currentNumber * 3;
    }
});
numbers.map(function(currentNumber, index) {
    return currentNumber * (index % 2 === 0 ? 2 : 3);
});

为了补充另一个答案,OP困惑的根源在于“地图”是如何工作的。
map
函数已经为每个元素调用了,但OP试图在其中使用
while
循环,这是迭代每个元素的另一种方式。这是一种双重交互,因此,本质上,如果OP的代码起作用,它仍然会修改每个数字
n
次!通常,您只需在循环或映射之间进行选择:

使用循环:

var numbers = [1,7,9,21,32,77];
for (var i=0; i<numbers.length; ++i)
    numbers[i] = i % 2 === 0 ? numbers[i] * 2 : numbers[i] * 3;
或者,非常简单地说:

[1,7,9,21,32,77].map(function(n,i){ return n * [2,3][i%2]; });

基本上,如果初始数组的元素为:

  • 在偶数位置,然后将元素乘以2
  • 在奇数位置,然后将元素乘以3
您可以使用和来获得这一行


console.log([1,7,9,21,32,77]).map((num,ind)=>num*(ind%2==0?2:3))
甚至不需要
if
语句或三元运算符。由于
索引%2
的值为0或1,只需在
映射
回调中使用它:
返回currentNumber*(2+索引%2)
[1,7,9,21,32,77].map(function(n,i){ return n * [2,3][i%2]; });