2016-09-26 6 views
1

У меня есть код, похожий на следующее:Массив уменьшения функции возвращается NAN

var temp=[{"name":"Agency","y":32,"drilldown":{"name":"Agency","categories":["APPS & SI","ERS"],"data":[24,8]}},{"name":"ER","y":60,"drilldown":{"name":"ER","categories":["APPS & SI","ERS"],"data":[7,53]}},{"name":"Direct","y":60,"drilldown":{"name":"Direct","categories":["APPS & SI","ERS"],"data":[31,29]}}]; 

var reduced=temp.reduce(function (a,b) { 
     return a.y + b.y; 
    }); 
console.log(reduced) // returns NAN 
+1

объяснить вопрос - как только вы возвращаетесь первую сумму, то TypeOf 'a' будет be Number - у которого нет свойства 'y' –

+0

проверить параметры обратного вызова функции функции, каковы они? – passion

ответ

14

Вы можете использовать начальное значение и надстройку только одно значение из массива.

var temp=[{"name":"Agency","y":32,"drilldown":{"name":"Agency","categories":["APPS & SI","ERS"],"data":[24,8]}},{"name":"ER","y":60,"drilldown":{"name":"ER","categories":["APPS & SI","ERS"],"data":[7,53]}},{"name":"Direct","y":60,"drilldown":{"name":"Direct","categories":["APPS & SI","ERS"],"data":[31,29]}}]; 
 

 
var reduced = temp.reduce(function (r, a) { 
 
     return r + a.y; 
 
     // ^^^ use the last result without property 
 
    }, 0); 
 
// ^^^ add a start value 
 
console.log(reduced) // r

+0

один вкладыш const reduced = temp.length? temp.reduce ((r, a) => {return r + a.y;}, 0): 0; – webmaster

+0

@webmaster, еще короче, принимает начальное значение уменьшения для пустых массивов: 'const reduced = temp.reduce ((r, {a}) => r + a, 0);' –

2

короткое решение: карта сбора для сбора целых чисел, а также уменьшить его

var temp=[{"name":"Agency","y":32,"drilldown":{"name":"Agency","categories":["APPS & SI","ERS"],"data":[24,8]}},{"name":"ER","y":60,"drilldown":{"name":"ER","categories":["APPS & SI","ERS"],"data":[7,53]}},{"name":"Direct","y":60,"drilldown":{"name":"Direct","categories":["APPS & SI","ERS"],"data":[31,29]}}]; 

var reduced = temp 
       .map(function(obj) { return obj.y; }) 
       .reduce(function(a, b) { return a + b; }); 

console.log(reduced); 
Смежные вопросы