javascript
2015-12-24 23 views 0 likes 
0

循環對象,我有一些問題,我的JavaScript問題在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}] 
+0

@nishant,well spotted – Billy

+3

並且不要在數組中使用'for ...in'循環 – adeneo

+1

@Nishant在'for-in'循環中不需要'i ++' –

回答

3

我建議,以改善這樣的循環代碼的東西:

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

外貌更清晰和更健壯的我...

0

我不知道爲什麼你用了很多代碼來獲得這個結果。您可以使用此代碼:

<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> 

0

爲(A在B)圈剛過對象迭代性能。要遍歷數組元素使用for each循環。

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

作爲可變ARRobj.h的參考。

相關問題