我一直在尝试编写代码,将数组的偶数索引元素乘以 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,所以我不明白为什么我收到了我所做的输出。
任何帮助将不胜感激。
您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)
| 归档时间: |
|
| 查看次数: |
3429 次 |
| 最近记录: |