首页 > 解决方案 > 如何根据给定参数检查(和更新)嵌套数据库中的电影列表?

问题描述

这是一个在嵌套数组/对象上使用循环和条件的练习。这是相当初学者,所以请不要花哨的技术。

鉴于该数据库:

DB = [
        {
            genre:'thriller', 
            movies:[
                {
                    title:'the usual suspects', release_date:1999
                }
            ]},
            {
            genre:'commedy', 
            movies:[
                {
                    title:'pinapple express', release_date:2008
                }
            ]}
    ]

我将如何检查一个类型,例如“戏剧”是否在该数据库中并在其中(如果没有,则具有类似的模式,或者如果已经存在则什么都不做?

我此时的功能是:

var moviesDB = function (array, genre) {
    for (var i= 0; i < array.legnth; i++) { 
        if (DB[i].genre != genre) {
            DB.genre({genre: genre, movies: []});
        }
    }
}

我如何为moviesDB(DB,“戏剧”)正确地做到这一点?

标签: javascriptarraysloopsobject

解决方案


首先,您要在电影数据库数组中搜索与搜索类型不匹配的任何元素,如果未找到匹配项,则使用具有新类型和空电影数组的新条目创建一个新数组,返回新数组。

我把它写成一个纯函数。

const DB = [
  {
    genre: 'thriller', 
    movies: [
      {
        title: 'the usual suspects',
        release_date: '1999'
      }
    ]
  },
  {
    genre: 'comedy', 
    movies: [
      {
        title: 'pineapple express',
        release_date: '2008'
      }
    ]
  }
];

const addMissingGenre = (movieArray, genre) => {
  if (movieArray.every(movieGenre => movieGenre.genre !== genre)) {
    // create new array and add new genre object, and return
    return [...movieArray, { genre, movies: [] }];
  }
  return movieArray; // return unmutated array
};

console.log(addMissingGenre(DB, 'thriller')); // not added
console.log(addMissingGenre(DB, 'drama')); // added


推荐阅读