javascript中循环对象的问题

issue in looping object in javascript

本文关键字:问题 对象 循环 javascript      更新时间:2023-09-26

我的JavaScript 有一些问题

<html>
<body>
<p id="demo2"></p>
<script>
     var text = '{"h":["username","hair_color","height"],"d":[["ali","brown",1.2],["ma0072c","blue",1.4],["joe","brown",1.7],["zehua","black",1.8]]}';
     var obj = JSON.parse(text);
     var x= Object.keys(obj.h).length;
     var y= Object.keys(obj.d).length;
     var json_datas = JSON.stringify(obj.h);
     var json_data = JSON.stringify(obj.d);
     var obj2 = JSON.parse(json_data);
     var json_data2 = JSON.stringify(obj2[1]);
     var obj3 = JSON.parse(json_data2);
     var newjson = [];
     var newjson2 = [];
     i=0;
     l=0;
     z=0;
     m=0;
     var boys= {};
     for (i in obj.h){      
         boys[obj.h[i]] = obj.d[m][l];
         l++;
         z++;
         m++;
         newjson.push(boys);
     }
     newjson2 = newjson2.concat(newjson);
     var newjson2 = JSON.stringify(newjson);
     document.getElementById("demo2").innerHTML = newjson2; 
</script>
</body>
</html>

该脚本boys[obj.h[i]] = obj.d[m][l];

为什么代码不想循环?有人能告诉我正确的循环吗?我想要像这个一样的输出

[{"username":"ali","hair_color":"brown","height":1.2},
 {"username":"marc","hair_color":"blue","height":1.4},
 {"username":"joe","hair_color":"brown","height":1.7},
 {"username":"zehua","hair_color":"black","height":1.8}]

但我现在的输出是这样的

[{"username":"ali","hair_color":"brown","height":1.2},
 {"username":"ali","hair_color":"brown","height":1.2},
 {"username":"ali","hair_color":"brown","height":1.2},
 {"username":"ali","hair_color":"brown","height":1.2}]

我建议将循环代码改进为这样的代码:

var newjson2 = [];
obj.d.forEach(function(element) {
  var k = {};
  element.forEach(function(element, i){
    k[obj.h[i]] = element;
  })
  newjson2.push(k);
})

对我来说,看起来更清晰、更健壮…

for(a in b)循环只是在对象属性上迭代。要迭代数组元素,请使用forEach循环。

obj.h.forEach(function(element, idx, arr){
   boys[arr[element]] = obj.d[m][l];
   l++;
   z++;
   m++;
   newjson.push(boys);
});

变量arr引用obj.h.

我不知道你为什么要用很多代码来得到这个结果。你可以使用这个代码:

<html>
<body>
 <p id="demo2"></p>
 <script>
   var text = '{"h":["username","hair_color","height"],"d":[["ali","brown",1.2],["ma0072c","blue",1.4],["joe","brown",1.7],["zehua","black",1.8]]}';
   var obj = JSON.parse(text);
   var newjson = [];
   for (var i = 0 ; i < obj.d.length; i++){ 
    var boys= {};
    for(var j= 0; j < obj.h.length; j++) {
      boys[obj.h[j]] = obj.d[i][j];    
    }
    newjson.push(boys);
   }
  document.getElementById("demo2").innerHTML = JSON.stringify(newjson);
</script>