【发布时间】:2021-04-29 17:47:42
【问题描述】:
我正在尝试从mysql 加载一些数据,但我的代码复制了结果。我的数组应该包含 2 个具有不同信息的对象,但我得到了 4 个。我在 module.exports 里面,我在 MySQL 上有 2 个条目。
let serverInfo = [];
loadInfo: function(){
gm.mysql.handle.query('SELECT * FROM `info`', [], function(err, res, row){
if(err) console.log(err);
if(res.length){
for (let i = 0; i < res.length; i++) {
res.forEach(function(zData){
let id = zData.id;
let name = zData.name;
let color = zData.color;
let icon = zData.icon;
serverInfo.push({id: id, name: name, color: color, icon: icon});
if(name == "Server") {
name = "Server in use";
}
});
}
// This code shows 4 results, the 2 existing on MySQL and another two.
console.log("Loaded "+serverInfo.length+" servers.");
console.log(serverInfo);
/* This console log shows this
[
{
id: 1,
name: 'Server',
color: 62,
icon: 50
},
{
id: 2,
name: 'Cloud',
color: 67,
icon: 3
},
{
id: 1,
name: 'Server',
color: 62,
icon: 50
},
{
id: 2,
name: 'Cloud',
color: 67,
icon: 3
}
]
*/
}
});
}
【问题讨论】:
-
你在循环中调用它。为什么不会重复?你有
for (let i = 0; i < res.length; i++) { res.forEach(/*...*/); },所以你重复调用res.forEach,每个i的值一次。你的意思是res[i].forEach(/*...*/)? -
你的
forEach在另一个for循环中。for循环正在为res中的每个对象执行forEach -
我正在对另一个表使用相同的代码,并且它加载正确。
-
如果另一个表只有一行,它将正确加载。是这样吗?
标签: javascript node.js arrays object