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

标签 javascript lodash

我想加入两个数组

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

const departments [{ id: 900, manager: 100 }, { id: 901, manager: 101 }]

我想通过将 user_id 属性与部门的 manager< 匹配来创建一个包含用户的 name 的新 departments 数组 属性。

lodash(或纯 Javascript)中是否有一种简单的方法来实现这一点?

新数组看起来像这样

[{ id: 900, manager: 100, name: 'Bob' }, { id: 900, manager: 101, name: 'Joe' }];

感谢任何帮助!

最佳答案

您可以使用 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²)迭代。这与小型用户阵列无关,但在处理较大的阵列时会出现。

关于javascript - 在匹配的对象属性上连接两个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48361998/

相关文章:

javascript - 如何在 javascript 或 lodash 中将每个数组元素转换为单独的数组

javascript - 重新映射 json 对象以进行消息传递

javascript - angular-ui-tree,从数据库中的数据填充树

javascript - 使用 Google map 地点库在 map 上显示的标记不超过 20 个

mongodb-query - 将 mongodb 集合分组并将结果输出为单个对象

javascript - 在 Javascript 中排序列表

javascript - return false 在 then 中不起作用,并且使用 lodash 绑定(bind)函数

javascript - 用 jQuery 替换图像

javascript - 如何使用 gio js 将地球颜色从黑色更改为白色

javascript - 未找到配置文件 : No non–expired provisioning profiles were found