2017-10-18 160 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}] 

我想两个for循环(也许)和很多如果的,但也许有一些我失踪的方式。

我使用node.js,如果这意味着什么。也许有一个模块可以提供帮助?

谢谢。

+6

请包括尝试的解决方案,为什么他们没有工作,和预期的结果。这真的会帮助我们找出你的代码的问题。谢谢! –

+0

使用'id'作为'HashMap'键并执行递归['Object.assign'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign )秒。尽管如此,你将不得不为优先权设置规则。请提供更多细节,也许还有一些尝试。 – 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' } ] 
相关问题