通过减少JavaScript中的一些数组数据对象来帮助重构

通过减少JavaScript中的一些数组数据对象来帮助重构,javascript,arrays,object,higher-order-functions,Javascript,Arrays,Object,Higher Order Functions,我需要减少profiles数组中的数据,以便最终对象根据喜爱的电影和喜欢/喜爱该电影的用户对profile obj中的数据进行分组。 我想要像这样的东西: { 'Forrest Gump': ["Nicholas Lain"], 'Planet Earth 1': ["Jane Jones", "Matthew Johnson"] } 从以下数据对象: const profiles = [ { id: 1, userID: '1',

我需要减少profiles数组中的数据,以便最终对象根据喜爱的电影和喜欢/喜爱该电影的用户对profile obj中的数据进行分组。 我想要像这样的东西:

{
 'Forrest Gump': ["Nicholas Lain"],
 'Planet Earth 1': ["Jane Jones", "Matthew Johnson"]
}
从以下数据对象:

const profiles = [
      {
        id: 1,
        userID: '1',
        favoriteMovieID: '1',
      },
      {
        id: 2,
        userID: '2',
        favoriteMovieID: '1',
      },
      {
        id: 3,
        userID: '4',
        favoriteMovieID: '5',
      }
    ];

    const users = {
      1: {
        id: 1,
        name: 'Jane Cruz',
        userName: 'coder',
      },
      2: {
        id: 2,
        name: 'Matthew Johnson',
        userName: 'mpage',
      }
    };

    const movies = {
      1: {
        id: 1,
        name: 'Planet Earth 1',
      },
      2: {
        id: 2,
        name: 'Selma',
      }
    };
我需要一些重构以下代码的想法,以便它返回到users和movies对象,从我在下面捕获的ID中获取他们的名字。我需要捕获名称,而不是ID

profiles.reduce(function (acc, obj) {
    let key = obj['favoriteMovieID']
    if (!acc[key]) {
      acc[key] = []
    }
    acc[key].push(obj.userID)
    return acc
  }, {})

这里有一种技术,对个人资料进行折叠,在参数中获取电影和人名,然后简单地用这些数据编写一个新的累加器。请注意,正如Rich Snapp中所述,这可能存在性能问题。如果这导致了一个实际问题,那么很容易改变它来改变累加器

我添加了一些额外的数据来显示当用户或电影不在适当的列表中时会发生什么。如果这无法实现,您可以稍微简化
name
person
声明。但我不建议这样做,因为事实上,“永远不会发生”的事情确实经常发生

constgroupnamesbymovie=(配置文件、用户、电影)=>
减少((
a、 {userID,favoriteMovieID},{,},
{name}=movies[favoriteMovieID]|{name:'未知电影'},
{name:person}=users[userID]|{name:'Unknown person'}
) => ({
A.
[姓名]:[…(姓名),个人]
}), {})
const profiles=[{id:1,userID:“1”,favoriteMovieID:“1”},{id:2,userID:“2”,favoriteMovieID:“1”},{id:3,userID:“4”,favoriteMovieID:“5”},{id:5,userID:“5”,favoriteMovieID:“7”}]
const users={1:{id:1,姓名:“Jane Cruz”,用户名:“coder”},2:{id:2,姓名:“Matthew Johnson”,用户名:“mpage”},4:{id:4,姓名:“Nicholas Lain”,用户名:“nlain”},5:{id:5,姓名:“Fred Flintstone”,用户名:“bedrock1”}
const movies={1:{id:1,名称:'Planet Earth 1'},2:{id:2,名称:'Selma'},5:{id:5,名称:'Forrest Gump'}
控制台日志(
groupNamesByMovie(配置文件、用户、电影)

)
如何传递4个以上的参数以减少回调?{name}和{name:person}。我还需要帮助理解reduce回调中发生的事情。添加了澄清。我花了几个小时来解包压缩代码中加载的ES6 goodies(第一种方法)。即,对象分解和使用排列组合数组和对象。现在有道理了。第三种方法(以更传统的方式解决性能问题)马上就有了意义。非常感谢您,先生!