【发布时间】:2020-12-01 17:22:50
【问题描述】:
我试图从一个对象中获取两条数据并将其作为一个新对象推送到一个数组中。数据由对我的 SQL 数据库的 API 调用提供。该 API 调用正常工作并在控制台表中显示对象。当脚本运行 forEach 方法将数据提取到自己的对象中,然后将该新对象推送到新数组时,新数组返回“未定义”。代码如下:
示例数据(目前只有一个占位符条目,事件数组将以这种格式植入多个示例)
events = [{location: "Emergency Shelter", latitude: "37.5434", longitude: "-77.4435"}]
声明的空数组和 API 调用正常运行:
let events = [];
let locations = [];
$.get("/api/events", data => {
for (let i = 0; i < data.length; i++) {
events.push(data[i]);
}
});
console.table 正确显示对象并包含具有正确对应值的键“纬度”和“经度”
forEach 方法:
locations = events.forEach(location => {
const coords = {};
coords.latitude = location.latitude;
coords.longitude = location.longitude;
locations.push(coords);
});
console.log("Coordinates list: " + locations);
console.log 显示“坐标列表:未定义”
我觉得我可能在某个地方错过了退货,但我不确定在哪里。我尝试添加
return locations;
在 forEach 方法中,但它不会改变任何东西(我相信这会在通过整个数组之前退出我的函数)。任何帮助表示赞赏!
【问题讨论】:
-
events不是一个数组,而是一个对象。你确定吗? -
它是一个对象数组。我的示例数据周围缺少括号。刚刚编辑。
-
这很简单。请尝试运行我更新的答案。
-
部分问题是 API 调用内部的范围问题。事件是 API 函数之外的一个空数组。我已经纠正了这一点,现在 console.log(events) 在 API 函数之外正确显示了对象。我已经尝试了@baymax 和 Peter Seliger 提供的 map 方法和 foreach 方法,但 console.log(locations) 仍然只显示一个空数组。感谢你们在这方面的持续帮助。
-
它现在正在使用 map 方法。这对我来说似乎很奇怪,但解决方案是在将值推送到 API 调用内部之后运行 map 方法,如下所示。如果我删除一个或另一个,则数组为空。似乎多余,但它有效。 $.get("/api/events", data => { for (let i = 0; i
标签: javascript arrays object foreach