2012-06-14 10 views
-2

다음과 같은 배열 구조가 있습니다. 나는 다른 형식으로 변환해야하는자바 스크립트 배열 구조

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

나는 예상되는 답을 얻지 못한다. 여기

감사

구문 오류가 난 모든 유형의 Object { Maths=0, Science=0, English=0}입니다 무엇을 얻을

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

우유없는 corect 코드입니다. 하지만 제가 필요한 것은

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

그는 존재하지 않는 속성에 단순히 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을 사용하여 작동하는 것을 보여줍니다.