2012-06-14 200 views
-2

我有一個像下面的數組結構。我需要在轉換爲不同的格式Javascript陣列結構

test = [ 
    S1 { 
     science : 90 
    } 
    S2 
    { 
     Science:80, 
     Maths :56 
    } 
    ] 

我有擁有所有的科目如下

Subjects { 
    Science : 0 
    Maths :0 
    English:0 
    } 

我想我上面的數組轉換到下面的結構數組

S1 { 
science : 90, 
Maths :0, 
English:0 

} 
S2 
{ 
Science:80, 
Maths :56, 
English:0 
} 

這意味着如果主題不可用我想輸入一個鍵值對爲0

我試過以下

for (var i = 0; i < test.length; i++) { 
         for (var key in test[i]) { 
        for (var iKey in test[i][key]) { 
       varr s = (t.hasOwnProperty(iKey)) ? t[iKey] : createSubjects(); 
       s[key] = test[i][key][iKey]; 
       t[iKey] = s; 
          } 
         } 
        } 

    function createSubjects(){ 
          var obj = []; 
          //categoryArray 

          for (var a = 0, l = Subjects a < l; ++a) { 

           obj[Subjects [a]] = 0; 
         } 

         return obj; 
         } 

我沒有得到預期的答案,請有人幫我糾正這一點。由於

這裏是corect代碼不用其他的語法錯誤

var test = [ 
    S1 = { 
    science : 90 

    }, 
S2 = 
{ 
    Science:80, 
    Maths :56 
} 
] 

var Subjects = { 
Science : 0, 
Maths :0, 
English:0 
} 
function createSubjects(){ 
return {'Maths' : 0, 'Science': 0,'English':0} 
} 


var t = {} 
console.log(createSubjects()) 
for (var i = 0; i < test.length; i++) { 
    for (var key in test[i]) 
    { 
      var s = (t.hasOwnProperty(key)) ? t[key] : createSubjects(); 
      console.log(s) 
    } 
} 

我所得到的是 Object { Maths=0, Science=0, English=0}的所有類型。但是,我需要的是

Object { Maths=0, Science=90, English=0} 
Object { Maths=56, Science=80, English=0} 

感謝

+0

你期望什麼?你真正看到的是什麼? – David

+0

對於初學者,您有許多語法錯誤。你的數組定義和for循環語句是兩個問題可能出現的地方。 –

+0

您需要了解JavaScript數組和對象的基礎知識。您需要的輸出不是有效的JavaScript。 – erturne

回答

0

如果我正確地理解你的問題,這應該工作。

marks = [ s1 = { science : 90 }, s2 = { science : 80, maths : 56 } ]; 
for (var i = 0; i< marks.length; i++) { 
if(!(marks[i].hasOwnProperty("science"))){ 
    marks[i].science = 0; 
} 

if(!(marks[i].hasOwnProperty("maths"))){ 
    marks[i].maths = 0; 
} 

if(!(marks[i].hasOwnProperty("english"))){ 
    marks[i].english = 0; 
} 
} 
+0

當數組索引中的對象具有該屬性時,您的實現不會添加值。 – tjscience

+0

@tjscience多數民衆贊成他期待知道嗎?如果它沒有帶主題名稱的屬性並標記它,則將主題名稱和標記添加爲0? – Shreedhar

+0

他要求從一個數組轉換爲另一個數組,而不是簡單地爲不存在的屬性添加零值。 – tjscience

1

這就是我想出來的。與原來的對象數組開始(與語法固定):

var test = [ 
    { 
     "Science": 90 
    }, 
    { 
     "Science": 80, 
     "Maths": 56 
    } 
]; 

然後你期望的輸出(模板):

var template = { 
    "Science" : 0, 
    "Maths": 0, 
    "English": 0 
}; 

下面是可以轉換的原始陣列獲得所有的該模板的屬性,如果他們不存在(各種各樣的合併):

function convertArray(r, t) { 
    for (var i = 0, l = r.length; i < l; i++) { 
     tp_loop: 
     for (var tp in t) { 
      for (var rp in r[i]) { 
       if (!r[i].hasOwnProperty(tp)) { 
        r[i][tp] = t[tp]; 
        continue tp_loop; 
       } 
      } 
     } 
    } 
} 

用法:

convertArray(test, template); 

下面是一個簡化的JSFiddle來說明它的工作原理。