数组的console.log返回undefined



我试图从一个对象中获取两段数据,并将其作为新对象推送到数组中。数据由API调用提供给我的SQL数据库。API调用工作正常,并在控制台表中显示对象。当脚本运行forEach方法将数据提取到它自己的对象中,然后将该新对象推送到一个新数组时,新数组返回"0";未定义";。以下代码:

示例数据(当前只有一个占位符条目,事件数组将以这种格式播种多个示例(

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方法中,但它不会更改任何内容(我相信这会在遍历整个数组之前退出我的函数(。感谢您的帮助!

forEach不返回任何内容,因此locations应为undefined。您不应该将forEach的返回值传递给locations

events.forEach(location => {
const coords = {};
coords.latitude = location.latitude;
coords.longitude = location.longitude;
locations.push(coords);
});
console.log("Coordinates list: " + locations);

也可以使用map函数。

const events = [
{ location: 'Emergency Shelter', latitude: '37.5434', longitude: '-77.4435' }
];
const locations = events.map(({ latitude, longitude }) => ({
latitude,
longitude
}));
console.log(locations);

尝试一种基于map的方法,它还可以将代码压缩为。。。

const events = [{
location: "Emergency Shelter",
latitude: "37.5434",
longitude: "-77.4435"
}, {
location: "Peopl's Kitchen",
latitude: "36",
longitude: "-78"
}, {
location: "Salvation Army",
latitude: "38",
longitude: "-76"
}]; 
const locations = events.map(({ latitude, longitude }) => ({ latitude, longitude }));
console.log("Coordinates list: ", locations); // do not concatenate the result.
console.log("Coordinates list: " + locations);
console.log("Coordinates list: " + JSON.stringify(locations));
.as-console-wrapper { min-height: 100%!important; top: 0; }

map通过迭代另一个数组来创建一个新数组,其中新数组的每个项都等于映射/转换函数的返回值,在每个迭代步骤中,该函数确实处理原始数组的当前值。

最新更新