2015-11-11 39 views
0

我有對象數組,其中有子對象(嵌套對象)。整個結構正在與此類似(所有子對象具有相同的標籤,只值是不同的):顯示下一個(新)行中的嵌套對象屬性

  var arr = [ 
       obj0 = { 

        subObj0: { 
         name: "John", 
         lastName: "Doe", 
         age: 50, 
         nick: "JD", 
         phone: 123456 
        }, 
        subObj1: { 
         name: "Jane", 
         lastName: "Dee", 
         age: 30, 
         nick: "lady", 
         phone: 654098 
        }, 
        subObj2: { 
         name: "Ash", 
         lastName: "Bash", 
         age: 33, 
         nick: "asdB", 
         phone: 987123 
        } 
       }, 
       obj1 = { 
        subObj0: { 
         name: "Asd", 
         lastName: "Dsa", 
         age: 10, 
         nick: "none", 
         phone: 12 
        }, 
        subObj1: { 
         name: "Ivy", 
         lastName: "Mash", 
         age: 3, 
         nick: "IvMash", 
         phone: 9823 
        } 

       } 

      ]; 

我是想顯示在控制檯這些子對象是這樣的:

for (index in arr) 
{ 
    for (index2 in arr[index]) 
    { 
     console.log(JSON.stringify(arr[index][index2],null,4)); 
    } 
} 

,它給了我輸出這些對象和子對象的樹。

如何將顯示在控制檯中作爲每個子對象都在新行中,如下所示?

enter image description here

因此,沒有逗號和雙引號,只有「的標籤:值」形式。

+0

你故意創建全局變量('obj0','obj1')? – Teemu

+0

不,我在之前的循環中創建了子對象的這個對象數組,我在這裏稱它爲(obj0,obj1),導致JavaScript將它們動態地稱爲它們。 – Chris92

+1

爲什麼不在創建數組的同一個循環中創建字符串表示? 'JSON.stringify'將其第一個參數轉換爲JSON數據格式,它不會創建任意格式。注意'obj0'和'obj1'不是數組的一部分,它們只是變量和全局變量,如果你還沒有在函數中聲明它們的話。 – Teemu

回答

1

很少replace()應該這樣做。點擊運行按鈕查看結果。

var arr = [ 
 
    { 
 
     subObj0: { 
 
      name: "John", 
 
      lastName: "Doe", 
 
      age: 50, 
 
      nick: "JD", 
 
      phone: 123456 
 
     }, 
 
     subObj1: { 
 
      name: "Jane", 
 
      lastName: "Dee", 
 
      age: 30, 
 
      nick: "lady", 
 
      phone: 654098 
 
     }, 
 
     subObj2: { 
 
      name: "Ash", 
 
      lastName: "Bash", 
 
      age: 33, 
 
      nick: "asdB", 
 
      phone: 987123 
 
     } 
 
    }, 
 
    { 
 
     subObj0: { 
 
      name: "Asd", 
 
      lastName: "Dsa", 
 
      age: 10, 
 
      nick: "none", 
 
      phone: 12 
 
     }, 
 
     subObj1: { 
 
      name: "Ivy", 
 
      lastName: "Mash", 
 
      age: 3, 
 
      nick: "IvMash", 
 
      phone: 9823 
 
     } 
 

 
    } 
 

 
]; 
 

 
var output = []; 
 
arr.forEach(function (obj, i) { 
 
    output.push('obj' + i + ':'); 
 
    for (var key in obj) { 
 
     var value = obj[key]; 
 
     var str = JSON.stringify(value) 
 
      .replace(/[{}"]/g, '') // remove {} and " 
 
      .replace(/[,]/g, '\t') // replace commas by tabulations 
 
      .replace(/:/g, ': '); // add a nice space after : 
 
     output.push(key + ': ' + str); 
 
    } 
 
}) 
 

 
output = output.join('\n'); 
 
console.log(output); 
 
document.write('<pre>' + output + '</pre>');

+0

謝謝!我還添加了'.replace(/ [\ [\]'] +/g,'')'去除方括號。 – Chris92

+0

我發現更多的語義(我認爲)的方式來輸出每個子對象與我的類型的對象結構分開的行http://pastebin.com/ptKs4ize 。 **產品**是每個數組索引第一個合適的對象。最終導致我的數組元素具有像http://imgur.com/dnna9tV這樣的結構。所以外層循環遍歷數組(長度爲3),然後我必須去'產品'的第一個對象,然後遍歷它的長度,並在那裏通過內部(第二)循環我可以輸出每個子對象。 – Chris92