我试图获得以下数组中的奇数,然后使用reduce
方法乘以2,但它给了我undefined
错误。请帮忙。
const multiplyOddByTwo = (arr) => {
return arr.reduce((acc, curr) => {
if (curr % 2 === 0) {
arr.push(curr);
} else {
arr.push(curr * 2)
}
}, [])
}
console.log(multiplyOddByTwo([1, 2, 3]));
需要指出的两件事:
- 您必须修改reduce函数中的第二个参数。这是你的初始价值。reduce回调(acc(中的第一个参数是在特定迭代之前的累积值
- 您必须在每次迭代中返回您的累积值。(在最后一次迭代中,这将是您计算的答案。这里您没有返回任何内容,因此未定义(
const multiplyOddByTwo = (arr) => {
return arr.reduce((acc, curr) => {
if (curr % 2 === 0) {
acc.push(curr);
} else {
acc.push(curr * 2)
}
return acc;
}, [])
}
console.log(multiplyOddByTwo([1, 2, 3])); // [2,2,6]
这将奇数索引元素乘以2。
编辑:这不是未定义的错误。这只是返回的undefined
。任何不返回任何内容的函数都返回undefined
。
如果你希望它只返回奇数乘以2,而不返回偶数,那么使用这个:
const multiplyOddByTwo = (arr) => {
const odd = arr.filter(num => num % 2 !== 0);
return odd.map(i => i * 2);
}
console.log(multiplyOddByTwo([1, 2, 3]));
否则,如果你希望它返回所有数字,但将奇数乘以2,那么使用这个:
const multiplyOddByTwo = (arr) => {
return arr.map(num => num % 2 === 0 ? num : num * 2);
}
console.log(multiplyOddByTwo([1, 2, 3]));