.reduce()没有在javascript中返回数组

时间:2017-01-16 15:44:15

标签: javascript arrays reduce

我编写了一个函数,它从XML请求中获取解析的JSON,当我使用forEach()时它会起作用,所以我想用reduce()来推动我用JS做的事情。我做错了什么?

forEach功能:

function whatTemp48h(response){
var data;
data = response ;
var temp = [];
data.hourly.data.forEach(function(el,inx){
    temp.push(el.apparentTemperature)

})
console.log(temp)
return temp;
}

减少功能:

function gimmeThaTemps(res){
return res.hourly.data.reduce(function(accu,el,c){
    accu.push(el.apparentTemperature);
    return accu;
},[]);
}
当我使用reduce时,它会返回任何内容。 我正在使用AJAX调用来返回一些已解析的JSON,并且我正在调用AJAX函数并向其发送回调。

function getWeather(lat,long, cb){
var xhr = new XMLHttpRequest();
var response;
  xhr.open('GET','https://api.darksky.net/forecast/'+api_KEY+'/'+lat+','+long,true);
xhr.onload = function() {
    // console.log(this.responseText)
    // console.log(JSON.parse(this.responseText));
    cb(JSON.parse(this.responseText));
};
xhr.onerror = function() {
console.log("Connection error");
};
xhr.send();
}

当我打电话给我时

var reqReturn = getWeather(decodeMTL.lat,decodeMTL.long,gimmeThaTemps)

console.log(reqReturn);

对于新问题我很抱歉,但我还在学习JS。 附:我有一个XMLhttpprerequest节点npm在我的命令行中运行它。

2 个答案:

答案 0 :(得分:0)

有点偏离主题,您正在寻找的可能是函数map

return res.hourly.data.map(function(el) { return el.apparentTemperature; });

或者使用lambda:

return res.hourly.data.map(el => el.apparentTemperature);

答案 1 :(得分:0)

我的代码错了。我在回调中回来,因此它无处可回!