下面的代码可以工作,但我怎样才能让它更简洁呢? 在两个数组中,我们有一个共同的属性 (_id)。有了这个属性,我从数组 2 中获得了一个属性。 更具体: 数组“电影”包含具有属性“_id”和“标题”的项目电影。 数组“favoritemovies”仅包含“_id”。 我想将用户最喜欢的电影列表作为标题返回。
var favoritemovies = [1111,3333];
const movies = [
{_id:1111, title: 'movie1'},
{_id:2222, title: 'movie2'},
{_id:3333, title: 'movie3'},
];
var movieTitles = [];
for (var i = 0; i < favoritemovies.length; i++) {
var favMovies = movies.filter(movie => movie._id == favoritemovies[i])
movieTitles.push(favMovies);
var movieTitlesFlat = movieTitles.flat();
}
for (var i = 0; i < favoritemovies.length; i++) {
console.log(movieTitlesFlat[i].title);
}
最佳答案
缩减为一个由_id
索引的对象,然后在favoritemovies
上调用.map
,整体复杂度为O( N)
:
var favoritemovies = [1111,3333];
const movies = [
{_id:1111, title: 'movie1'},
{_id:2222, title: 'movie2'},
{_id:3333, title: 'movie3'},
];
const moviesById = movies.reduce((a, { _id, title }) => {
a[_id] = title;
return a;
}, {});
const titles = favoritemovies.map(id => moviesById[id]);
console.log(titles);
(这也可以通过嵌套循环操作来完成,但如果不首先将 movies
转换为某种 map ,复杂度将为 O(N^2)
)
关于javascript - 如何精简这段代码?通过第二个数组的共享属性 (_id) 获取数组的属性 (title),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56389726/