我有一个人物对象数组,其中包含:
- (人的)id
- (人的)姓名
- 喜欢(他们喜欢的人的 ID)
.
array = [{ id:1, name:"Adam", likes:2 },{ id:2, name:"Ben", likes:3 },{ id:3, name:"Cindy", likes:1 }];
最终的数组应该将他们喜欢的人的 id 替换为他们的名字
array = [{ id:1, name:"Adam", likes:"Ben" },{ id:2, name:"Ben", likes:"Cindy" },{ id:3, name:"Cindy", likes:"Adam" }];
当前解决方案:
for(let i=0;i<array.length;i++){
for(let j=0;array.length;j++){
if(array[i].likes == array[j].id){
array[i].likes = array[j].name;
};
};
};
除了使用 2 个循环之外,还有更有效的方法吗?
最佳答案
这是 O(n) 方法:
const byID = new Map(array.map(u => [u.id, u]));
for(const u of array)
u.likes = byID.get(u.likes);
通过在 O(n) 中构建 Map,查找的时间复杂度为 O(1),因此整个操作的执行时间为 O(n) + O(1 * n) = O(n)。
关于javascript - 数组值替换为对应的id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58425618/