2017-10-18 16 views
1

Javascriptでいくつかのデータを消去しています。共通IDに基づいてオブジェクトを結合する方法があるかどうかは疑問でした。次を考えるJavascriptでオブジェクトを結合する方法はありますか?

{"subject":"Hadji Singh","predicate":"nameOfUser","id":"3f540200-58b9-40a5-91c2-faafec75216f"} 
{"subject":"Race Roger Bannon","predicate":"nameOfUser","id":"41376a49-34ee-4ed8-b5f5-3f8c92b107f8"} 
{"subject":"Jessie Bannon","predicate":"nameOfUser","id":"9575cf33-8992-4763-81bb-fc640ffa3545"} 
{"subject":"Adventurer","predicate":"departmentOfUser","id":"3f540200-58b9-40a5-91c2-faafec75216f"} 
{"subject":"Bodyguard","predicate":"departmentOfUser","id":"41376a49-34ee-4ed8-b5f5-3f8c92b107f8"} 
{"subject":"Adventurer","predicate":"departmentOfUser","id":"9575cf33-8992-4763-81bb-fc640ffa3545"} 

このような何かにそれを有効にする方法はありますか?

[{id:3f540200-58b9-40a5-91c2-faafec75216f, name:Hadji Singh, department:Adventurer}, 
{id:9575cf33-8992-4763-81bb-fc640ffa3545, name:Jessie Bannon, department:Adventurer}, 
{id:41376a49-34ee-4ed8-b5f5-3f8c92b107f8, name:Race Bannon, department:Bodyguard}] 

私は2つのループ(おそらく)と多くの場合、考えていますが、多分私は行方不明です。

node.jsを使用しています。おそらく、助けることができるモジュールがありますか?

ありがとうございました。

+6

彼らは動作しなかった理由を試みたソリューション、および期待される結果を記載してください。それは本当にあなたのコードの問題を理解するのに役立ちます。ありがとう! –

+0

'id'を' HashMap'キーとして使用し、再帰的な['Object.assign'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign )s。あなたは優先順位のためのルールを設定しなければならないでしょう。詳細と多少の試みをご提供ください。 – zero298

+0

アンダースコアを使用する - https://stackoverflow.com/questions/19480008/javascript-merging-objects-by-id – Jaybird

答えて

1

使用のアレイのreduce方法:

let a = [{"subject":"Hadji Singh","predicate":"nameOfUser","id":"3f540200-58b9-40a5-91c2-faafec75216f"}, 
{"subject":"Race Roger Bannon","predicate":"nameOfUser","id":"41376a49-34ee-4ed8-b5f5-3f8c92b107f8"}, 
{"subject":"Jessie Bannon","predicate":"nameOfUser","id":"9575cf33-8992-4763-81bb-fc640ffa3545"}, 
{"subject":"Adventurer","predicate":"departmentOfUser","id":"3f540200-58b9-40a5-91c2-faafec75216f"}, 
{"subject":"Bodyguard","predicate":"departmentOfUser","id":"41376a49-34ee-4ed8-b5f5-3f8c92b107f8"}, 
{"subject":"Adventurer","predicate":"departmentOfUser","id":"9575cf33-8992-4763-81bb-fc640ffa3545"}] 

let b = a.reduce((acc, val) => { 
    let id = val.id 
    let idx = acc.findIndex((e) => e.id == id); 
    let subj = { id: id } 
    let predicate = val['predicate'].split('OfUser')[0] 
    subj[predicate] = val['subject'] 
    if (-1 == idx) { 
    acc.push(subj); 
    } else { 
    acc[idx] = Object.assign(acc[idx], subj); 
    } 
    return acc 
}, []) 

console.log(b); 

//[ { id: '3f540200-58b9-40a5-91c2-faafec75216f', 
// name: 'Hadji Singh', 
// department: 'Adventurer' }, 
// { id: '41376a49-34ee-4ed8-b5f5-3f8c92b107f8', 
// name: 'Race Roger Bannon', 
// department: 'Bodyguard' }, 
// { id: '9575cf33-8992-4763-81bb-fc640ffa3545', 
// name: 'Jessie Bannon', 
// department: 'Adventurer' } ] 
関連する問題