如何访问日期格式键名的嵌套对象属性?NASA API数据访问问题
解决NASA API嵌套对象日期键访问报错的问题
这个报错的原因很明确:你直接写的2018-09-07在JavaScript里会被当成算术减法运算(2018减9减7),而不是你想要的日期字符串键名,严格模式下这种写法就会抛出"Legacy octo literals are not allowed in strict mode"的错误。
直接解决方法:用字符串包裹日期键
要正确访问带连字符的日期键,你需要把日期放在引号里(单引号或双引号都可以),告诉JS这是一个字符串键:
const asteroidList = this.props.asteroids.near_earth_objects["2018-09-07"]; console.log(asteroidList); // 现在可以正常访问该日期的小行星数据了
如果你的日期是动态生成的(比如用户选择的日期),可以先把日期存成字符串变量,再用变量访问:
const targetDate = "2018-09-07"; // 这里可以替换成动态获取的日期 const asteroidList = this.props.asteroids.near_earth_objects[targetDate]; console.log(asteroidList);
遍历所有日期数据的方案
如果你需要处理所有日期的小行星数据,可以先提取所有日期键,排序后逐个访问:
const nearEarthObjects = this.props.asteroids.near_earth_objects; // 获取所有日期键并按时间排序(NASA返回的数据通常已经按日期排序,不过手动排序更稳妥) const sortedDates = Object.keys(nearEarthObjects).sort((dateA, dateB) => new Date(dateA) - new Date(dateB)); // 遍历每个日期的数据 sortedDates.forEach(date => { const dailyAsteroids = nearEarthObjects[date]; console.log(`日期 ${date} 的小行星数据:`, dailyAsteroids); // 在这里添加你的业务逻辑,比如渲染数据、筛选特定小行星等 });
补充说明
在JavaScript中,对象的键名如果包含特殊字符(比如-、空格)或者不是有效的标识符(比如以数字开头),必须用字符串形式通过方括号访问。如果用点语法(比如obj.2018-09-07)也会报错,因为点语法要求键名是有效的标识符。
内容的提问来源于stack exchange,提问作者Farah10
相关产品推荐
相关产品推荐

