javascript - 如何在 JavaScript 中高效地进行数组比较

标签 javascript ecmascript-6

TMDB API 返回一个电影对象数组,如下所示:

{
"vote_count": 1527,
"id": 338952,
"video": false,
"vote_average": 7,
"title": "Fantastic Beasts: The Crimes of Grindelwald",
"popularity": 272.487,
"poster_path": "/uyJgTzAsp3Za2TaPiZt2yaKYRIR.jpg",
"original_language": "en",
"original_title": "Fantastic Beasts: The Crimes of Grindelwald",
"genre_ids": [
   10751,
   14,
   12
],
"backdrop_path": "/xgbeBCjmFpRYHDF7tQ7U98EREWp.jpg",
"adult": false,
"overview": "Gellert Grindelwald has .....",
"release_date": "2018-11-14"
}

他们还提供了一个 API,用于返回带有键和标签的对象数组中的所有可用流派:

genres": [
{
"id": 28,
"name": "Action"
},
{
"id": 12,
"name": "Adventure"
},
{
"id": 16,
"name": "Animation"
}
]

我需要做的是从正在播放的 API 中获取所有独特流派及其标签值的列表。

所以我的问题不是如何做到这一点,而是最干净、最有效的方法是什么。

我的尝试:

let uniqueIds = new Set(), genres;

// First get all available unique genre IDs from the now playing list
for(var i = 0; i < this.state.items.length; i++){
    for(var x = 0; x < this.movies[i].genre_ids.length; x++){
        uniqueIds.add(this.movies[i].genre_ids[x])
    }
}

// build array of genre objects from unique genre IDs
genres = this.genres.filter((genre) => uniqueIds.has(genre.id));

最佳答案

1)对于数组中的每个对象,获取genre_ids

2) 过滤 id 包含在 ids 数组中的流派对象。

const api = [{"vote_count":1527,"id":338952,"video":false,"vote_average":7,"title":"Fantastic Beasts: The Crimes of Grindelwald","popularity":272.487,"poster_path":"/uyJgTzAsp3Za2TaPiZt2yaKYRIR.jpg","original_language":"en","original_title":"Fantastic Beasts: The Crimes of Grindelwald","genre_ids":[10751,14,12],"backdrop_path":"/xgbeBCjmFpRYHDF7tQ7U98EREWp.jpg","adult":false,"overview":"Gellert Grindelwald has .....","release_date":"2018-11-14"},{"vote_count":1527,"id":338952,"video":false,"vote_average":7,"title":"Fantastic Beasts: The Crimes of Grindelwald","popularity":272.487,"poster_path":"/uyJgTzAsp3Za2TaPiZt2yaKYRIR.jpg","original_language":"en","original_title":"Fantastic Beasts: The Crimes of Grindelwald","genre_ids":[10751,14,16],"backdrop_path":"/xgbeBCjmFpRYHDF7tQ7U98EREWp.jpg","adult":false,"overview":"Gellert Grindelwald has .....","release_date":"2018-11-14"}];
const genres = [{"id":28,"name":"Action"},{"id":12,"name":"Adventure"},{"id":16,"name":"Animation"}];

// [].concat(...arr) flattens consequtive arrays down
const idArr = [].concat(...api.map(obj => obj.genre_ids));
const matchingGenres = genres.filter(obj => idArr.includes(obj.id));

console.log(matchingGenres);

关于javascript - 如何在 JavaScript 中高效地进行数组比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53559000/

相关文章:

javascript - 如何用 JSX/ES6 简写形式编写 if else 语句?

javascript - 解构对象内数组内的对象

javascript - React native 应用卡在白屏上,没有任何错误

javascript - 当我使用 "await"创建函数的变量时,该函数立即运行还是仅在我调用该变量时运行?

javascript - 从连续的 jQuery ajax 调用返回 promise ?

java - 跟踪对网页内容的更改

javascript - 使用 `Unexpected token import` 时,`webpack.config.babel.js` 中的 `{modules: false}`

javascript - const ddk = document.querySelector ('#ddk > input' );不起作用?只在控制台中显示 null

javascript - 如何删除/清除传单中的标记?

javascript - 使用输入字段自定义文本