I have some problem with my 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>
this script boys[obj.h[i]] = obj.d[m][l];
why the code doesn't want to loop? Can someone tell me the correct loop? I want the output like this
[{"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}]
but my output right now is like this
[{"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}]
3 Answers 3
I'd suggest to improve the loop code to something like this:
var newjson2 = [];
obj.d.forEach(function(element) {
var k = {};
element.forEach(function(element, i){
k[obj.h[i]] = element;
})
newjson2.push(k);
})
Looks clearer and more robust for me...
answered Dec 24, 2015 at 12:16
Stepashka
2,69820 silver badges24 bronze badges
Sign up to request clarification or add additional context in comments.
Comments
for (a in b) loops just iterates over object properties. To iterate over array elements use the forEach loop.
obj.h.forEach(function(element, idx, arr){
boys[arr[element]] = obj.d[m][l];
l++;
z++;
m++;
newjson.push(boys);
});
Being the variable arr a reference to obj.h.
Comments
I don't know why you used a lot of code for getting this result. You can use this code:
<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>
Oriol
291k71 gold badges459 silver badges535 bronze badges
answered Dec 24, 2015 at 12:33
Feroj Bepari
4444 silver badges10 bronze badges
Comments
lang-js
for ..inloops on arraysi++in afor-inloop