2016-05-20 1 views
-1

私はArrayのリストを持っていますが、カテゴリに基づいてオブジェクトにフィルタリングしました。最初は、エラーを出していたelse ifの省略表現を使用しましたが、その関数はelse if条件で正常に動作しています。私は、簡略表現で何が原因なのかを把握することができません。 fiddlepushメソッドがjavascriptと連携していない場合

var a =[[{'cat':'student','renk':1},{'cat':'student','renk':2},{'cat':'student','renk':10}],[{'cat':'teacher','renk':1},{'cat':'teacher','renk':2}]] 

var obj = {} 

for(var i=0;i<a.length;i++){ 
for(var z =0;z<a[i].length;z++){ 
obj[a[i][z]['cat']] 
if(obj[a[i][z]['cat']]){ 
obj[a[i][z]['cat']].push(a[i][z]) 
} 
else{ 
obj[a[i][z]['cat']] = [a[i][z]] 
} 

//obj[a[i][z]['cat']] = obj[a[i][z]['cat']]?obj[a[i][z]['cat']].push(a[i][z]):[a[i][z]] 
} 
} 
console.log(obj) 

そして、このジョブが

+4

_Quiet horrible_ :) – Rayon

+0

はい、それは恐ろしいように思えます。 ) – Carlos

+0

@パトリックエヴァンスの3行目がコメントアウトされました – zer00ne

答えて

1

は、私はあなたが本当にすべて行う必要があるとは思いませんこれは、あなたのサンプルからa配列内の各サブ配列は、同じカテゴリに属する​​ので、あなたは何かを行うことができるように何かをすることができる

var a = [ 
 
    [{ 
 
    'cat': 'student', 
 
    'renk': 1 
 
    }, { 
 
    'cat': 'student', 
 
    'renk': 2 
 
    }, { 
 
    'cat': 'student', 
 
    'renk': 10 
 
    }], 
 
    [{ 
 
    'cat': 'teacher', 
 
    'renk': 1 
 
    }, { 
 
    'cat': 'teacher', 
 
    'renk': 2 
 
    }] 
 
] 
 

 
var obj = {} 
 

 
a.forEach(function(array) { 
 
    if (array.length) { 
 
    obj[array[0].cat] = array; //use array.slice(0) if you want to have a copy of the array 
 
    } 
 
}) 
 
op.innerHTML = JSON.stringify(obj, null, 2)
<pre id="op"></pre>


しかし、あなたはそれがわからないと三項演算子を使用したい場合は、その後

var a = [ 
 
    [{ 
 
    'cat': 'student', 
 
    'renk': 1 
 
    }, { 
 
    'cat': 'student', 
 
    'renk': 2 
 
    }, { 
 
    'cat': 'student', 
 
    'renk': 10 
 
    }], 
 
    [{ 
 
    'cat': 'teacher', 
 
    'renk': 1 
 
    }, { 
 
    'cat': 'teacher', 
 
    'renk': 2 
 
    }] 
 
] 
 

 
var obj = {} 
 

 
a.forEach(function(array) { 
 
    if (array.length) { 
 
    array.forEach(function(rec) { 
 
     obj[rec.cat] ? obj[rec.cat].push(rec) : obj[rec.cat] = [rec] 
 
    }) 
 
    } 
 
}) 
 
op.innerHTML = JSON.stringify(obj, null, 2)
<pre id="op"></pre>

+0

'forEach'の' if(array.length){'は必要ありません。単に長さが0の場合は実行されません。 – AdityaParab

0

を成し遂げるために任意のより良い方法があるかどうか提案してください何をしたい、このです:

var a =[[{'cat':'student','renk':1},{'cat':'student','renk':2},{'cat':'student','renk':10}],[{'cat':'teacher','renk':1},{'cat':'teacher','renk':2}]]; 

var obj = {}; 

for(var i=0; i<a.length; i++) { 
    for(var z=0; z<a[i].length; z++) { 
    //obj[a[i][z]['cat']] //I have commented this as its not needed 
    if(obj[a[i][z]['cat']]) { 
     obj[a[i][z]['cat']].push(a[i][z]); 
    } 
    else { 
     obj[a[i][z]['cat']] = [a[i][z]]; 
    } 
    //obj[a[i][z]['cat']] = obj[a[i][z]['cat']]?obj[a[i][z]['cat']].push(a[i][z]):[a[i][z]] 
    } 
} 
console.log(obj); 
関連する問題