【问题标题】:ForEach is repeating (duplicate results)ForEach 重复(重复结果)
【发布时间】: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 &lt; res.length; i++) { res.forEach(/*...*/); },所以你重复调用res.forEach,每个i的值一次。你的意思是res[i].forEach(/*...*/)
  • 你的forEach 在另一个for 循环中。 for 循环正在为 res 中的每个对象执行 forEach
  • 我正在对另一个表使用相同的代码,并且它加载正确。
  • 如果另一个表只有一行,它将正确加载。是这样吗?

标签: javascript node.js arrays object


【解决方案1】:

您应该为此更改 for 循环:

                for (let i = 0; i < res.length; i++) {                            
                        const zData = res[i]                         
                        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";
                        }
                        
                }
               

【讨论】:

  • 如果这样做,我将无法访问 zData。
  • 是的,我错过了那部分。我已经做出了改变。检查它是否适合你的伴侣。
  • 很高兴听到这个消息。 @Hidro
猜你喜欢
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-02
  • 2017-09-11
  • 2011-12-03
相关资源
最近更新 更多