2016-04-27 5 views
3

それがあったように私は、コードを次のようにオブジェクトの上の配列をマージしようとしていた場合commondatajavascriptでオブジェクトを同じキーでマージするには?

commondata = [{ 
    giverUser: 'Abc', 
    createdAt: '2016 11: 48: 40', 
    note: 'Test' 
}, { 
    giverUser: 'Xyz', 
    createdAt: '12: 22: 37', 
    note: 'Test data' 
}, { 
    giverUser: 'Abc', 
    createdAt: '2016 14: 22: 07', 
    note: '"test123"' 
}]; 

と呼ばれる配列が、私は、同じ配列を取得していています。以下は

私のコードです:

commondata.forEach(function(a, i) { 

    if (!this[a.giverUser]) { 

    this[a.giveruser] = { 
     giverUser: a.giverUser, 
     createdAt: [], 
     note: [] 
    }; 
    r_grouped.push(this[a.giveruser]); 
    } 

    this[a.giveruser].createdAt = this[a.giveruser].createdAt.concat(a.createdAt); 
    this[a.giveruser].note = this[a.giveruser].note.concat(a.note); 
}, Object.create(null)); 

上記のコードで間違っていますか? なぜ私は同じgiveruserで合併の配列を取得していないのですか?

+0

'reduce'と' object.assign'を使用できます。 – evolutionxbox

+0

あなたの答えはすでにここにあります。 http://stackoverflow.com/questions/171251/how-can-i-merge-properties-of-two-javascript-objects-dynamically – DININDU

+0

ああ、上記のコードで何が間違っていますか? – Akki

答えて

6

あなたはgiveruserといくつかのタイプミスがgiverUser

残りはちょうど別の注釈

this[a.giverUser].createdAt = this[a.giverUser].createdAt.concat(a.createdAt); 

番目の罰金

var commondata = [{ giverUser: 'Abc', createdAt: '2016 11:48:40', note: 'Test' }, { giverUser: 'Xyz', createdAt: '12:22:37', note: 'Test data' }, { giverUser: 'Abc', createdAt: '2016 14:22:07', note: '"test123"' }], 
 
    r_grouped = []; 
 

 
commondata.forEach(function (a, i) { 
 
    if (!this[a.giverUser]) { 
 
     this[a.giverUser] = { giverUser: a.giverUser, createdAt: [], note: [] }; 
 

 
     r_grouped.push(this[a.giverUser]); 
 
    } 
 
    this[a.giverUser].createdAt.push(a.createdAt); 
 
    this[a.giverUser].note.push(a.note); 
 
}, Object.create(null)); 
 

 
document.write('<pre>' + JSON.stringify(r_grouped, 0, 4) + '</pre>');

を働いているべきである持っています値が単なる配列でない場合はisは必要ありません。代わりにプッシュを取ることができます。

this[a.giverUser].createdAt.push(a.createdAt); 
関連する問題