gpt4 book ai didi

javascript - NodeJS - JSON 数组推送元素但不会增加长度

转载 作者:太空宇宙 更新时间:2023-11-04 03:14:58 24 4
gpt4 key购买 nike

我正在 NodeJS 中创建一个 JSON 对象,该对象将在 GET 调用中返回。该对象必须返回当天起每天 3 小时的天气预报。

所需的 JSON 结构为:

期望的响应

{
"current": {
// Stuff... This part works fine
},
"forecast": [
"Tuesday": [
{
// More stuff...
},
{
// More stuff...
},
// More stuff...
],
"Wednesday": [
{
// More stuff...
},
{
// More stuff...
},
// More stuff...
],
// More stuff...
]
}

在 NodeJS 中我这样做:

json.forecast = [];
json.forecast[weekDay] = [];

for (var i = 1; i < data.cnt; i++) {
var hour = {};
var forecastDay = getDay(forecast[i].dt_txt);

if (forecastDay !== weekDay) {
weekDay = forecastDay;
json.forecast[weekDay] = [];
}

hour.date = forecast[i].dt_txt || 'unknow';
hour.day = getDay(forecast[i].dt_txt);
hour.time = getTime(forecast[i].dt_txt);
hour.temp = getValue(forecast[i].main.temp);
hour.maxtemp = getValue(forecast[i].main.temp_max);
hour.mintemp = getValue(forecast[i].main.temp_min);
hour.wind_speed = getValue(forecast[i].wind.speed);
hour.rain = forecast[i].rain ? forecast[i].rain["3h"] : 'unknow';
hour.humidity = getValue(forecast[i].main.humidity);
hour.condition = {};
hour.condition.text = forecast[i].weather[0].description || 'unknow';
hour.condition.icon = getIconUrl('openweather', forecast[i].weather[0].icon, logger);

json.forecast[weekDay].push(hour);
}

var“weekDay”是通用的,因为我不知道我将在哪一天开始,并且因为我想在运行时为每一天创建一个新项目。

问题是每天都有项目插入数组,但长度没有增长:

NodeJS debug

GET 响应返回一个空数组:

Postman response

最佳答案

您的预测是一个数组,但数组是索引数据结构。在 JS 中,一切都是对象,因此您可以输入基于字符串的属性,但是基于索引的值的长度将增加。因此您看到的长度为 0。

以下示例说明了 length 的工作原理。

Length = Last element's index + 1

事实上,任何非索引值甚至都不会被迭代。

var data = [];

data['foo'] = 'Hello World';

console.log(data.length);

data[10000] = 0;

console.log(data.length);

data.forEach((value, index) => console.log(value, index))

关于javascript - NodeJS - JSON 数组推送元素但不会增加长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57974321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com