首页 > 解决方案 > 在 arry 循环中重复结果

问题描述

我的代码有什么问题:

function Nums( use, dep, unt, prt, no){
      this.uses = use;
      this.department = dep;
      this.units = unt;
      this.part = prt;
      this.numbers = no;
    }

      var n1 = new Nums( "use1", "depart1", "unit1", "part1", "3562")
      var n2 = new Nums( "use2", "depart2", "unit2", "part2", "5226" )

      var obj = [n1, n2];
      var res = [];
      var r = "";
      var srch = "5"
      var div = document.getElementById("a");

      for( i = 0; i<obj.length; i++){
        for( key in obj[i]){
          if(obj[i][key].includes(srch)){
            res.push(obj[i])
            for( x = 0; x<res.length; x++){
              for( itm in res[x]){
                res2 = r += res[x][itm]
                div.innerHTML = res2;
              }
            }
          }
        }
      }
      console.log(res)

我想在innerhtml中打印结果,但输出在“html”控制台内重复2次,结果是正确的。原因是什么?

innerHTML 结果:

使用1 => 离开1 => 单元1 => 部分1 => 3562 =>use1 => depart1 => unit1 => part1 => 3562 =>使用2 => 离开2 => 单元2 => 部分2 => 5226 =>

控制台结果:

[{使用:“use1”,部门:“depart1”,单位:“unit1”,部分:“part1”,数字:“3562”},{使用:“use2”,部门:“depart2”,单位:“unit2 ", 部分:"part2", 数字:"5226" }]

查看代码

标签: javascripthtml

解决方案


您在每次迭代时遍历 res 数组并继续附加它。

  for( i = 0; i<obj.length; i++){
    for( key in obj[i]){
      if(obj[i][key].includes(srch)){
        res.push(obj[i])
        for( x = 0; x<res.length; x++){
          for( itm in res[x]){
            res2 = r += res[x][itm]
            div.innerHTML = res2;
          }
        }
      }
    }
  }

它需要被移出或仅循环您刚刚添加的最后一个。

for (let i = 0; i<obj.length; i++) {
  for (let key in obj[i]){
    if(obj[i][key].includes(srch)) {
      res.push(obj[i])
    }
  }
}
for (let x = 0; x<res.length; x++) {  //pull out of the loops above
  for(let itm in res[x]) {
    res2 = r += res[x][itm]
  }
}
div.innerHTML = res2;  // only update DOM when done

并确保你声明了你的变量,你正在制作很多全局变量。


推荐阅读