reactjs 如何在JS中将分离的数据传递给数组中同名的数组?

63lcw9qa  于 2022-12-03  发布在  React
关注(0)|答案(1)|浏览(115)

我正在使用React js和Javascript。
我有这个对象文字:

artistList = {
    artist: [
        0:{name: 'Quirby', role: 'main'},
        1:{name: 'Jose', role: 'feature'}
    ],
    writer: [
        0:{name: 'Erik', role: 'publisher'},
        1:{name: 'Cairo', role: 'composer'},
        2:{name: 'Erik', role: 'song_writer'}
    ]
}

我想把角色加入到一个同名作家的数组中,就像这样:

artistList = {
    artist: [
        0:{name: 'Quirby', role: 'main'},
        1:{name: 'Jose', role: 'feature'}
    ],
    writer: [
        0:{name: 'Erik', role: ['publisher', 'song_writer']},
        1:{name: 'Cairo', role: 'composer'}
    ]
}

有什么主意吗?
我想在一个新的数组中加入同一个作者的角色,我不知道如何检查它们是否具有相同的名称并转换我的数组。

gmxoilav

gmxoilav1#

要完成此操作,可以使用JavaScript中的mapreduce方法来迭代writer数组中的对象,并创建具有所需格式的新数组。
下面是一个示例,说明如何执行此操作:

const artistList = {
  artist: [
    { name: "Quirby", role: "main" },
    { name: "Jose", role: "feature" }
  ],
  writer: [
    { name: "Erik", role: "publisher" },
    { name: "Cairo", role: "composer" },
    { name: "Erik", role: "song_writer" }
  ]
};

// Use the map method to iterate through the writer array
const newWriterArray = artistList.writer.map(writer => {
  // Use the reduce method to group the writer objects by name
  const roles = artistList.writer.reduce((acc, cur) => {
    if (cur.name === writer.name) {
      // If the names match, add the role to the array
      acc.push(cur.role);
    }
    return acc;
  }, []);

  // Return a new object with the name and the array of roles
  return { name: writer.name, roles };
});

// Update the writer array in the artistList object with the new array
artistList.writer = newWriterArray;

console.log(artistList);
// Output:
// {
//   artist: [
//     { name: "Quirby", role: "main" },
//     { name: "Jose", role: "feature" }
//   ],
//   writer: [
//     { name: "Erik", roles: ["publisher", "song_writer"] },
//     { name: "Cairo", roles: ["composer"] }
//   ]
// }

在上面的代码中,我们使用map方法迭代artistList对象中的writer数组。对于数组中的每个对象,我们使用reduce方法按名称对对象进行分组,并为该writer创建一个包含角色的新数组。然后返回一个包含名称和角色数组的新对象。最后,我们用新数组更新artistList对象中的writer数组。

相关问题