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

期待した答えが得られません。これを修正するのを手伝ってください。ありがとう

これは、構文エラーのない正しいコードです

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} 

ありがとう

4

2 に答える 2

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を次に示します。

于 2012-06-14T04:31:02.867 に答える
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;
 }
}
于 2012-06-14T04:15:42.410 に答える