我正在进行API调用,该调用返回带有一堆对象的Array的JSON响应。每个对象都有一个键“dt”,它是一天中特定时间的时间戳,另一个是“高度”键,即海洋在那个时刻预测或过去的潮汐高度。
我只想在AJAX呼叫发生的任何时刻当前潮汐的高度。这是我创建的功能,以实现这一目标:
let tideApi = 'https://www.worldtides.info/api?heights&lat=45.202&lon=-123.963&key=24e4ff14-6edf-4f79-9591-e47f9e0e21e1';
$.getJSON(tideApi, function(response) {
// Create Global variable
let tideHeight = 0;
// get current time
let nowMil = new Date().getTime();
// round that time to the nearest halfhour and convert back to timestamp (JSON timestamps are set in intervals of 30 minutes)
let timeNow = Math.round(nowMil/1000/60/30) * 30 * 60 * 1000;
// set entire array to variable
let heightArray = response.heights;
// get length
len = heightArray.length
// loop through each object in height array
for (var i=0; i < len; i++) {
// if one of the objects timestamp equals current time
if (i.dt = timeNow) {
// set tide height to variable
tideHeight = i.height;
// return tide height (curretly returning undefined)
console.log("Tide Height: " + tideHeight);
return tideHeight;
} else {
console.log("Error, no time found");
}
}
// put tide height into div
$("#tideStat").append("<p>" + tideHeight + "</p>");
});
它目前正在返回undefined,原因是我正在努力弄明白。任何帮助都会很棒!
API Call(不要担心此后会改变)
答案 0 :(得分:2)
您的代码中存在一些问题
let timeNow = Math.round(nowMil/1000/60/30) * 30 * 60 * 1000;
。您的API似乎没有返回毫秒。删除* 1000
。heightArray
中的内容。而是仅检查dt
上的height
和i
属性,这是一个整数。因此,分别将i.dt
和i.height
更改为heightArray[i].dt
和heightArray[i].height
。if (lhs = rhs)
时,您正在尝试分配,而不是比较。因此,请在=
条件中将===
更改为if
。return tideHeight;
。我想你想要break
?不过不确定。由于此行,您的上一个jQuery
相关代码无法执行。Forked pen。一些日志被注释掉以获得更好的输出。
答案 1 :(得分:1)
使用括号表示法引用i
数组,heightArray
运算符的===
对象,而不是=
,它是赋值运算符
if (heightArray[i].dt === timeNow) {
// do stuff
tideHeight = heightArray[i].height;
}