javascript - For-in cicle 仅返回 array.push 中的最后一个结果
问题描述
我使用 Vue.js 2,并且我有一个从 API(https://developers.themoviedb.org/3/getting-started/introduction这个)获取的对象数组,该 API 链接到一个变量,即 v-model的输入。因此,每当变量更改时,数组也会随着@keyup 时调用 API 的函数而更改。该数组是关于电影和电视节目的。它有这样的结构:
(20) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, __ob__: we]
0:
backdrop_path: (...)
first_air_date: (...)
genre_ids: Array(3)
0: 18
1: 80
2: 9648
length: 3
__ob__: we {value: Array(3), dep: ce, vmCount: 0}
__proto__: Array
genres_name: ["Mistero"]
id: (...)
media_type: (...)
name: (...)
origin_country: (...)
original_language: (...)
original_name: (...)
overview: (...)
popularity: (...)
poster_path: (...)
vote_average: (...)
vote_count: (...)
这个数组为我提供了有关电影和电视剧的有用信息,但它并没有给我返回类型,至少不是这些的名称,而是与它们相关的 id 在 key 中genre_ids: Array(3)
。现在,我调用了另一个 API,它提供了这样的流派列表:
(19) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0:
id: 28
name: "Azione"
__proto__: Object
1:
id: 12
name: "Avventura"
__proto__: Object
2: {id: 16, name: "Animazione"}
3: {id: 35, name: "Commedia"}
4: {id: 80, name: "Crime"}
5: {id: 99, name: "Documentario"}
6: {id: 18, name: "Dramma"}
7: {id: 10751, name: "Famiglia"}
8: {id: 14, name: "Fantasy"}
9: {id: 36, name: "Storia"}
10: {id: 27, name: "Horror"}
11: {id: 10402, name: "Musica"}
12: {id: 9648, name: "Mistero"}
13: {id: 10749, name: "Romance"}
14: {id: 878, name: "Fantascienza"}
15: {id: 10770, name: "televisione film"}
16: {id: 53, name: "Thriller"}
17: {id: 10752, name: "Guerra"}
18: {id: 37, name: "Western"}
length: 19
__proto__: Array(0)
我想要的是比较两个数组的 id 并将流派列表的流派名称传递给每个对象的第一个数组,所以我这样做了
const newArray = this.searchResults.map ((element) => {
let objectResults = element.genre_ids;
console.log('objectResults', objectResults);
let object = element;
console.log('single-object', object);
this.genresName.forEach(genre => {
if (objectResults.includes(genre.id) ) {
object.genres_name = [];
for(var key in genre) {
if (key == 'name') {
console.log('key', genre[key]);
let keyName = '';
keyName = keyName + genre[key];
object.genres_name.push(keyName);
}
}
}
})
console.log(this.searchResults);
我的问题是我可以正确读取每个节目的每个流派的名称,因此 id 比较有效,但是当将它们推送到第一个数组的每个元素时,只有最后一个被推送并且只有一个。大多数节目应该有不止一种类型,因为它们有不止一个 id in genre_ids: Array
,但我只能获得其中一个,而且总是最后一个
解决方案
也许有一种更漂亮的方法可以做到这一点,但这很有效。这将在 movies 数组中创建一个名为 的新数组genreNames
,其中将包含相应的流派名称。
const genres = [
{ id: 12, name: "Avventura" },
{ id: 16, name: "Animazione" },
{ id: 35, name: "Commedia" },
{ id: 80, name: "Crime" },
{ id: 99, name: "Documentario" },
{ id: 18, name: "Dramma" },
];
const movies = [
{ genre_ids: [12, 16], name: "Movie 1" },
{ genre_ids: [80, 99], name: "Movie 2" },
{ genre_ids: [18, 12, 99], name: "Movie 3" },
];
// our final result
let finalArray = [];
movies.map(element => {
// create a temp array for the genres
let genreNames = []
element.genre_ids.map(genre => {
// each genreid from the movie, find the corresponding name from the genres array
genreNames.push(genres.find(val => val.id === genre).name)
})
// finally push the original movie and the newly create array for the names
finalArray.push({ ...element, genreNames })
})
console.log(finalArray);
推荐阅读
- python - 如何将 Figure 对象转换为具有 RGBA 值的 Numpy 数组?
- elasticsearch - 如何让 Elasticsearch 突出显示 search_as_you_type 字段中的部分单词?
- microsoft-teams - 尝试在 MS Teams 上上传自定义应用程序时出错
- android - Android Studio - CPU profiler .trace = "CPU 使用详情不可用"
- cdap - 如何通过 CDAP 管道的文件提供运行时参数/参数值
- sql - SQL Select语句如何返回表情符号
- javascript - 尝试构建自己的 Angular 表格组件但错误的 HTML 结构
- elasticsearch - 向弹性搜索服务器发送 curl 请求时不支持错误 application/x-www-form-urlencoded
- swift - 如何使用主页快速操作打开特定视图
- reactjs - 状态钩子中的 setState 第二个参数回调函数替代