javascript - 如何精简这段代码?通过第二个数组的共享属性 (_id) 获取数组的属性 (title)

标签 javascript arrays

下面的代码可以工作,但我怎样才能让它更简洁呢? 在两个数组中,我们有一个共同的属性 (_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/

相关文章:

javascript - Vue 3 从字符串动态加载组件

javascript - 在离开过渡处于事件状态时继续渲染组件

javascript - Jquery按数组中的元素值排序

javascript - 数组形式长度不起作用

c - Arduino C - 无法创建新方法和数组

javascript - 将此多级 Bootstrap 4 下拉克隆克隆到 mimc btn-dark 样式时遇到问题

javascript - setInterval() 在clearInterval() 之后不起作用

javascript - Google Distance Matrix 需要返回值

c结构数组初始化

c - C 中传递给函数的结构体数组