在匹配的对象属性上连接两个数组

Kur*_*usu 1 javascript lodash

我有两个我想加入的阵列

const users = [{ user_id: 100, name: 'Bob' }, { user_id: 101, name: 'Joe' }]

const departments [{ id: 900, manager: 100 }, { id: 901, manager: 101 }]
Run Code Online (Sandbox Code Playgroud)

我想创建一个departments包含用户的新数组,方法是nameuser_id属性与部门的manager属性相匹配.

有没有一种简单的方法来实现lodash(或简单的Javascript)?

新阵列看起来像这样

[{ id: 900, manager: 100, name: 'Bob' }, { id: 900, manager: 101, name: 'Joe' }];
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

tri*_*cot 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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

请注意,在每次迭代中使用数组搜索方法时,创建Map的额外步骤将导致O(n)时间效率,而不是O(n²).这与小型用户阵列无关,但在使用较大的阵列大小时也是如此.