我有两个我想加入的阵列
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包含用户的新数组,方法是name将user_id属性与部门的manager属性相匹配.
有没有一种简单的方法来实现lodash(或简单的Javascript)?
新阵列看起来像这样
[{ id: 900, manager: 100, name: 'Bob' }, { id: 900, manager: 101, name: 'Joe' }];
Run Code Online (Sandbox Code Playgroud)
任何帮助表示赞赏!
您可以使用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²).这与小型用户阵列无关,但在使用较大的阵列大小时也是如此.
| 归档时间: |
|
| 查看次数: |
145 次 |
| 最近记录: |