
本文介绍了如何使用 JavaScript 遍历包含 genre_ids 数组的电影对象数组,并根据 genres 数组中的 ID 匹配结果,为每个电影对象添加一个新的 genres 属性,该属性包含匹配到的 genre 名称数组。同时,可以选择删除原有的 genre_ids 属性。
实现方法
假设我们有两个数组:movies 和 genres。movies 数组中的每个对象都有一个 genre_ids 属性,它是一个包含数字 ID 的数组。genres 数组是一个包含对象,每个对象都有 id 和 name 属性的数组。我们的目标是遍历 movies 数组,并为每个电影对象添加一个 genres 属性,该属性是一个包含匹配到的 genre 名称的数组。
以下代码展示了如何实现这个目标:
const genres = [
{ id: 28, name: 'Action' },
{ id: 12, name: 'Adventure' },
{ id: 16, name: 'Animation' },
{ id: 35, name: 'Comedy' },
{ id: 80, name: 'Crime' },
{ id: 99, name: 'Documentary' },
{ id: 18, name: 'Drama' },
{ id: 10751, name: 'Family' },
{ id: 14, name: 'Fantasy' },
]
const movies = [
{
genre_ids: [ 16, 18, 12, 14 ],
title: 'Suzume',
}
]
movies.forEach((movie) => {
movie.genres = movie.genre_ids.map(
(id) => genres.find((genre) => id === genre.id).name
);
delete movie.genre_ids; // 可选:删除 genre_ids 属性
});
console.log(movies);代码解释:
立即学习“Java免费学习笔记(深入)”;
movies.forEach((movie) => { ... }): 使用 forEach 方法遍历 movies 数组,对每个 movie 对象执行回调函数。
movie.genres = movie.genre_ids.map(...): 为当前 movie 对象创建一个新的 genres 属性。这个属性的值是通过 map 方法将 movie.genre_ids 数组中的每个 ID 转换为对应的 genre 名称而得到的。
(id) => genres.find((genre) => id === genre.id).name: map 方法的回调函数。它接受一个 id 作为参数,并使用 genres.find() 方法在 genres 数组中查找 id 与 genre.id 相等的对象。找到后,返回该对象的 name 属性。
delete movie.genre_ids: 可选步骤。删除每个 movie 对象中原有的 genre_ids 属性。如果需要保留 genre_ids 属性,可以省略此行代码。
输出结果:
执行上述代码后,movies 数组将变为:
[
{
"title": "Suzume",
"genres": [
"Animation",
"Drama",
"Adventure",
"Fantasy"
]
}
]注意事项
- 确保 genres 数组中的每个对象都包含 id 和 name 属性,且 id 属性的值与 movies 数组中 genre_ids 数组中的值类型一致(都是数字)。
- 如果 genres 数组中没有找到与 genre_ids 中 ID 匹配的项,genres.find() 方法将返回 undefined。在这种情况下,上面的代码会报错。为了避免这种情况,可以添加一个检查,确保 genres.find() 方法返回的值不是 undefined。例如:
movies.forEach((movie) => {
movie.genres = movie.genre_ids.map(
(id) => {
const genre = genres.find((genre) => id === genre.id);
return genre ? genre.name : null; // 或者其他默认值,比如 'Unknown'
}
);
delete movie.genre_ids;
});总结
本文提供了一种使用 JavaScript 根据 ID 匹配并为数组对象添加新属性的方法。通过使用 forEach、map 和 find 方法,我们可以轻松地遍历数组,查找匹配项,并根据匹配结果创建新的属性。这种方法可以应用于各种场景,例如将 ID 转换为名称、将代码转换为描述等等。记住,根据实际需求调整代码,并添加必要的错误处理,以确保代码的健壮性和可靠性。










