JavaScript-将偶数索引数组元素乘以2,奇数索引数组元素乘以3
我一直在尝试编写代码,将数组的偶数索引元素乘以2,奇数索引元素乘以3 变量number中存储了以下数字,它表示一个数字数组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
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]; });