我想加入两个数组
const users = [{ user_id: 100, name: 'Bob' }, { user_id: 101, name: 'Joe' }]
const departments [{ id: 900, manager: 100 }, { id: 901, manager: 101 }]
我想通过将departments
属性与部门的name
属性相匹配来创建包含用户user_id
的新manager
数组。
有没有一种简单的方法可以在lodash
(或普通的Javascript)中实现这一点?
新数组看起来像这样
[{ id: 900, manager: 100, name: 'Bob' }, { id: 900, manager: 101, name: 'Joe' }];
感谢任何帮助!
答案 0 :(得分:7)
您可以使用Map进行更快速的查找,然后进行映射:
const users = [{ user_id: 100, name: 'Bob' }, { user_id: 101, name: 'Joe' }],
departments = [{ id: 900, manager: 100 }, { id: 901, manager: 101 }];
const names = new Map(users.map( user => [user.user_id, user.name] )),
res = departments.map( dep => Object.assign({ name: names.get(dep.manager) }, dep) );
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: 0; }
请注意,在每个步骤中使用数组搜索方法时,创建Map的额外步骤将导致 O(n)时间效率,而不是 O(n²)迭代。这与小型用户阵列无关,但在使用较大的阵列时也是如此。
答案 1 :(得分:3)
您可以使用map
和find
const users = [{ user_id: 100, name: 'Bob' }, { user_id: 101, name: 'Joe' }]
const departments = [{ id: 900, manager: 100 }, { id: 901, manager: 101 }]
const result = departments
.map(d => ({
...d,
name: users.find(u =>
u.user_id === d.manager).name
}));
console.log(result);