2017-08-10 56 views
-3

我在想,为什么这个代码中的错误与Cannot read property 'odd' of undefined查找错误上是奇数

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 

let isOdd = function(number){ 
    return number % 2 !== 0; 
} 

var oddEvenCounts = numbers.reduce(function(counts, number) { 
    let odd; 
    let even; 

    if (isOdd(number)) { 
     counts[odd] = counts['odd'] + 1; 
    } else { 
     counts[even] = counts['even'] + 1; 
    } 
}, {}); 

console.log(oddEvenCoutns(numbers)); 

// expected result 
// counts = { 
// odd: 1, 
// even: 3 
// } 

你看到那里的错误是什么?它主要指数[奇]和计数【连

+0

'counts'是不确定的 –

+0

没有我通过它降低? (函数(计数,数字)) –

+0

好了,然后'odd'设置为空,也请设置你的代码的格式,当你没有格式化你的代码时,很难理解发生了什么 –

回答

0

试试这个,你需要如果你正在寻找数赔率数量返回计数

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 
function isOddNumber(number){ 
    return number % 2 !== 0; 
} 

var oddEvenCounts = numbers.reduce(function(counts, number) { 
    let odd; 
    let even; 
    if(isOddNumber()){ 
     console.log(number) 
     counts['odd'] = number + 1; 
    } else { 
    counts['even'] = number + 1; 
    } 
    return counts; 
}, {}); 
console.log(oddEvenCounts); // this is not a function it holds the value from reduce 
+0

我只是试图解决这个问题的部分问题 - 我想知道为什么这样继续无法读取未定义的属性'奇怪'。无论如何感谢 –

+0

如果你不明白帮助的部分,那么继续进行反对 - 我想知道为什么这样继续下去不能读取未定义的属性“奇怪”,我只是给了他他可以修复的想法。 –

+0

但是,这是一个不起作用的答案?你已经把它改成了'count ['odd'] = number + 1',这根本没有意义,而且显然是错误的。 – adeneo

2

,并在列表中numbers找齐然后我要么误解你的意图,要么你的预期结果是错误的。

// expected result 
// counts = { 
// odd: 1, 
// even: 3 
// } 

当您的数组中有9个数字时没有意义。但是,我认为这个问题最适合作为mapreduce问题。由于您正在将相同的函数isOdd应用(映射)到数组中的每个元素,然后将其减少为单个对象。

let numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 

// good job, this looks fine! +1 strict equality operator 
const isOdd = function(number) { 
    return number % 2 !== 0; 
} 

// function to keep track of your odd and evens 
const sumEvenOdd = function(acc, cur) { 
    if (true == cur) { 
     acc['odd'] += 1; 
    } else { 
     acc['even'] += 1; 
    } 
    return acc; // make sure you return your resulting object so it doesn't lose scope! 
} 

let foo = numbers.map(el => isOdd(el)) // determine even or odd 
       .reduce(sumEvenOdd, {'even': 0,'odd': 0}); // sum even and odd! 
console.log(foo); // {'even': 5, 'odd': 4} 
0

一步一步的MapReduce

let numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2]; 

function is_odd(number) { return number % 2 !== 0; } 

function get_counts(numbers) { 
    numbers = numbers.map(is_odd);           // map is_odd over xs -> [true, true, false, false, true, true, false, false, false] 
    let odd_sum = numbers.reduce(function(sum, n) { return sum + n; }, 0); // reduce sum of true values -> 4 

    return { 'odd': odd_sum, 'even': numbers.length - odd_sum } 
} 

console.log(get_counts(numbers));