用相应的ID替换数组值

Har*_*rry 2 javascript loops for-loop node.js

我有一系列的人对象,其中包括:

  • (此人的)ID
  • (人名)
  • 喜欢(他们喜欢的人的ID)

array = [{ id:1, name:"Adam", likes:2 },{ id:2, name:"Ben", likes:3 },{ id:3, name:"Cindy", likes:1 }];
Run Code Online (Sandbox Code Playgroud)

最终数组应将其喜欢的人的ID替换为其姓名

array = [{ id:1, name:"Adam", likes:"Ben" },{ id:2, name:"Ben", likes:"Cindy" },{ id:3, name:"Cindy", likes:"Adam" }];
Run Code Online (Sandbox Code Playgroud)

当前解决方案:

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;
        };
    };
};
Run Code Online (Sandbox Code Playgroud)

除了使用2个循环以外,还有其他更有效的方法吗?

Jon*_*lms 5

这是O(n)的方式:

 const byID = new Map(array.map(u => [u.id, u]));

 for(const u of array)
   u.likes = byID.get(u.likes);
Run Code Online (Sandbox Code Playgroud)

通过在O(n)中构建Map,查找得到O(1),因此整个操作将在O(n)+ O(1 * n)= O(n)中执行。