两层for 循环中赋值问题

1:问题代码

<!DOCTYPE html>
<html>

  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>

  <body>
  <!--  <script src='js/jquery-3.3.1.min.js'></script>-->
    <script>
      var data = [{
          'id': 282562
        },
        {
          'id': 282563
        }
      ]
      var information = [];
      var array = {
          'passport': '',
          'cards': '',
          'property': ''
      }
      for(let i = 0; i < data.length; i++) {
         
        information.push({
          [data[i].id]: array
        });
      }
      console.log(information)
      var index = 0;
      for(var Key in information) {
        console.log(Key)
        if(Key == index) {
         // console.log('joker')
          for(var i in information[Key]) {
            console.log(information[Key][i])
            console.log(Key)
            console.log(index)
            information[Key][i].passport = 'joker';
          }
        }


      }
      console.log(information)
    </script>
  </body>

</html>

根据要求,只想给当前点击的passport赋值joker,但是这样写之后,代码没有问题,结果却全部赋值了

console结果:

其实只想给第一个ID为28256的赋值joker

很无奈,代码没问题,但是不是所想逻辑,

解决代码:

<!DOCTYPE html>
<html>

  <head>
    <meta charset="UTF-8">
    <title></title>
  </head>

  <body>
  <!--  <script src='js/jquery-3.3.1.min.js'></script>-->
    <script>
      var data = [{
          'id': 282562
        },
        {
          'id': 282563
        }
      ]
      var information = [];

      for(let i = 0; i < data.length; i++) {
          var array = {
              'passport': '',
              'cards': '',
              'property': ''
          }
        information.push({
          [data[i].id]: array
        });
      }
      console.log(information)
      var index = 0;
      for(var Key in information) {
        console.log(Key)
        if(Key == index) {
         // console.log('joker')
          for(var i in information[Key]) {
            console.log(information[Key][i])
            console.log(Key)
            console.log(index)
            information[Key][i].passport = 'joker';
          }
        }


      }
      console.log(information)
    </script>
  </body>

</html>

这样,问题就解决了,其实,只是for循环中作用域问题,把全局声明的对象放到for循环中变成局部变量 每次循环的时候去创建一个对象然后刚到数组里面,就好了

猜你喜欢

转载自blog.csdn.net/AnlanJion/article/details/81944178
今日推荐