admin管理员组文章数量:1333210
how to get sum of odd, even using reduce method, i have done as show in below code but returning undefined , @js-beginner
//code below
nums= [1,2,3,4,5,6,7,8,9]
function getOddEvenSum(numbers){
let{even,odd} = numbers.reduce((acc, cuu) => cuu%2 === 0?acc.even + cuu:acc.odd+cuu,{even:0, odd:0})
return {even, odd}
}
console.log(getOddEvenSum(nums)
//output i am getting below
{even:undefined, odd:undefined}
how to get sum of odd, even using reduce method, i have done as show in below code but returning undefined , @js-beginner
//code below
nums= [1,2,3,4,5,6,7,8,9]
function getOddEvenSum(numbers){
let{even,odd} = numbers.reduce((acc, cuu) => cuu%2 === 0?acc.even + cuu:acc.odd+cuu,{even:0, odd:0})
return {even, odd}
}
console.log(getOddEvenSum(nums)
//output i am getting below
{even:undefined, odd:undefined}
Share
Improve this question
edited Aug 27, 2021 at 11:39
sunilsalat
asked Aug 27, 2021 at 11:26
sunilsalatsunilsalat
1361 silver badge11 bronze badges
3
-
You can use
forEach
and add the variables to respective conditions instead. – Dhana D. Commented Aug 27, 2021 at 11:31 -
1
You don't actually assign incremented value to
acc
properties, try to changeacc.even + cuu:acc.odd+cuu
foracc.even += cuu:acc.odd+=cuu
and don't forget to returnacc
itself:numbers.reduce((acc, cuu) => (cuu%2 === 0?acc.even += cuu:acc.odd+=cuu, acc),{even:0, odd:0})
– Yevhen Horbunkov Commented Aug 27, 2021 at 11:33 -
Furthermore, there's no point in destructuring and bining back the same object, you may simply do
const getOddEvenSum = numbers => numbers.reduce(..
– Yevhen Horbunkov Commented Aug 27, 2021 at 11:38
4 Answers
Reset to default 4The value that you return from your reduce callback will be the value of acc
upon the next invocation/iteration of your array of numbers. Currently, your acc
starts off as an object, but as you're only returning a number from your first iteration, all subsequent iterations will use a number as acc
, which don't have .even
or .odd
properties. You could instead return a new object with updated even/odd properties so that acc
remains as an object through all iterations:
const nums = [1,2,3,4,5,6,7,8,9];
function getOddEven(numbers){
return numbers.reduce((acc, cuu) => cuu % 2 === 0
? {odd: acc.odd, even: acc.even + cuu}
: {even: acc.even, odd: acc.odd+cuu},
{even:0, odd:0});
}
console.log(getOddEven(nums));
You can use Array.prototype.reduce
like this:
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const [odds, evens] = nums.reduce(
([odds, evens], cur) =>
cur % 2 === 0 ? [odds, evens + cur] : [odds + cur, evens],
[0, 0]
);
console.log(odds);
console.log(evens);
This is not how the syntax of reduce
works. One possible implementation:
function getOddEven(nums) {
return nums.reduce(
({odd, even}, num) => num % 2 === 0 ?
{odd, even: even + num} :
{odd: odd + num, even},
{odd: 0, even: 0},
);
}
I would argue that this is not very clear. Since performance is probably not critical, a clearer alternative would be:
function getOddEven(nums) {
return {
odd: nums.filter(num => num % 2 == 1).reduce((acc, num) => acc + num),
even: nums.filter(num => num % 2 == 0).reduce((acc, num) => acc + num),
};
}
based on your code, you need to return acc
let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
function getOddEven(numbers) {
let {
even,
odd
} = numbers.reduce((acc, cuu) => {
if(cuu%2 == 0)
{
acc.even += cuu
}
else{
acc.odd += cuu
}
return acc
},
{
even: 0,
odd: 0
})
return {
even,
odd
}
}
console.log(getOddEven(nums))
本文标签: javascripthow to get sum of oddeven numbers using Arrayreduce methodStack Overflow
版权声明:本文标题:javascript - how to get sum of odd, even numbers using Array.reduce method? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1742280565a2446016.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论