Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度嵌套数组过滤整个对象_Javascript_Angularjs_Angularjs Ng Repeat_Angular Filters - Fatal编程技术网

Javascript 角度嵌套数组过滤整个对象

Javascript 角度嵌套数组过滤整个对象,javascript,angularjs,angularjs-ng-repeat,angular-filters,Javascript,Angularjs,Angularjs Ng Repeat,Angular Filters,我在controller.js和gallery.html上有以下代码 .controller('VideoGalleryController',['$scope','videogalleryFactory',函数($scope,videogalleryFactory){ //类型搜索框的值 $scope.genreOptions=[ “行动”, “冒险”, “喜剧”, “犯罪”, "戏剧",, "历史",, “恐怖”, “米斯特里”, "音乐剧",, “浪漫”, “科幻小说”, “惊悚片”,

我在controller.js和gallery.html上有以下代码

.controller('VideoGalleryController',['$scope','videogalleryFactory',函数($scope,videogalleryFactory){
//类型搜索框的值
$scope.genreOptions=[
“行动”,
“冒险”,
“喜剧”,
“犯罪”,
"戏剧",,
"历史",,
“恐怖”,
“米斯特里”,
"音乐剧",,
“浪漫”,
“科幻小说”,
“惊悚片”,
“西部”
];
//从db_movies.json获取菜肴
videogalleryFactory.getMovies()查询(
功能(响应){
$scope.movies=响应;
//显示嵌套类型
angular.forEach($scope.movies,函数(项){
console.log(item.genre);
})
},
功能(响应){
$scope.message=“错误:”+response.status+“”+response.statusText;
});					
}])

搜索电影:
搜索类型
{{movie.title}
{{GREEN}
{{movie.plot}

未找到任何结果…

这样就可以了

let target_genre = 'Adventure'; // what your user selected
let movies = obj.movies; // your movies array from your JSON

// Find out if a movie's genres contains the target genre
// If so, return it to the new array.
let movies_filtered = movies.filter ( x => { 
  return x.genre.indexOf ( target_genre ) >= 0 } );

console.log ( movies_filtered ); // two movies
编辑:由于实际使用的是一系列类型,因此您可以在这里测试“任何类型匹配”或“所有类型匹配”。请注意,现在的假设是,如果它可以是一个类型数组,那么它应该始终是一个类型数组,即使它是一个长数组,否则您将不得不编写“如果它是一个数组,那么以这种方式执行,如果不以那种方式执行”代码。如果它始终是一个数组,甚至是一个长数组,您只需始终以“它是一个数组”的方式进行操作


您可以将此解决方案用于es6:)

其中data是来自服务器的整个json数据

e、 g仅针对戏剧类型的输出:

filteredMoviesByGenreType(data, "Drama");

[[object Object] {
  alt: "Los juegos del hambre",
  cast: "Jennifer Lawrence, Josh Hutcherson, Elizabeth Banks, Woody Harrelson, Donald Sutherland, Stanley Tucci, Liam Hemsworth, Toby Jones, Lenny Kravitz, Wes Bentley, Paula Malcomson, Isabelle Fuhrman, Sandra Ellis Lafferty, Paula Malcomson, Kimiko Gelman, Nelson Ascencio, Brooke Bundy, Amandla Stenberg, Dayo Okeniyi, Leven Rambin, Jack Quaid, Latarsha Rose, Alexander Ludwig, Jacqueline Emerson",
  cover: "img/film_covers/losjuegosdelhambre.jpg",
  downloaddate: null,
  genre: ["Action", "Drama", "Science Fiction"],
  id: 2,
  length: 143,
  plot: "Lo que en el pasado fueron los Estados Unidos, ahora es una nación llamada Panem; un imponente Capitolio ejerce un control riguroso sobre los 12 distritos que lo rodean y que están aislados entre sí. Cada distrito se ve obligado a enviar anualmente un chico y una chica entre los doce y los dieciocho años para que participen en los Hunger Games, unos juegos que son transmitidos en directo por la televisión. Se trata de una lucha a muerte, en la que sólo puede haber un superviviente. Katniss Everdeen, una joven de dieciséis años, decide sustituir a su hermana en los juegos; pero para ella, que ya ha visto la muerte de cerca, la lucha por la supervivencia es su segunda naturaleza.",
  releasedate: "2011-12-31T23:00:00.000Z",
  title: "Los juegos del hambre"
}, [object Object] {
  alt: "Gladiator",
  cast: "Russell Crowe, Joaquin Phoenix, Connie Nielsen, Oliver Reed, Richard Harris, Ralf Moeller, Derek Jacobi, Djimon Hounsou, David Schofield, John Shrapnel, Spencer Treat Clark, Tomas Arana, David Hemmings, Tommy Flanagan, Sven-Ole Thorsen, Tony Curran, Giorgio Cantarini, Omid Djalili, Giannina Facio, Michael Sheen",
  cover: "img/film_covers/gladiator.jpg",
  downloaddate: null,
  genre: ["Action", "Adventure", "Drama", "Historical"],
  id: 3,
  length: 155,
  plot: "En el año 180, el Imperio Romano domina todo el mundo conocido. Tras una gran victoria sobre los bárbaros del norte, el anciano emperador Marco Aurelio (Richard Harris) decide transferir el poder a Máximo (Russell Crowe), bravo general de sus ejércitos y hombre de inquebrantable lealtad al imperio. Pero su hijo Cómodo (Joaquin Phoenix), que aspiraba al trono, no lo acepta y trata de asesinar a Máximo.",
  releasedate: "2000-04-30T22:00:00.000Z",
  title: "Gladiator"
}]

angular.forEach要做的就是迭代所有对象并显示流派。好奇的是,你为什么不使用Array.foreach而不仅仅是Array.foreach和b)为什么不使用Array.filter而不仅仅是迭代它?angular.foreach只是为了调试目的。它只在控制台中显示每一部电影的类型,但从你的问题来看,你想过滤吗?时间还早,我还没喝完咖啡,但我看不出任何过滤逻辑。这很难解释。“gallery.html”上的选择框显示不同类型的列表。我想要的是,一旦选择了一种类型,整个卡片(电影)与该类型将被过滤和显示。在屏幕截图中,仅应显示2张卡。因为我所有的尝试都没有成功,所以我不知道怎么做。我将发布一个示例,说明如何根据类型过滤JSON,以返回一个只包含所需项目的数组。然后,您可以使用该数组绑定到ng循环,或者以显示它的方式绑定。它成功了!!它返回如你所说的2部电影的阵列!!现在我必须使它适应我的需要!非常感谢。是的,当你看到答案时,这类ALG看起来多么简单,不是很烦人吗。关于algs,我了解到的一件事是,如果您需要几行以上的代码来测试基本情况,那么您可能走错了方向。然而,map/filter/reduce(fold)以及现在的set、union/diff/intersection对于任何JS开发人员来说都是非常简单的,而且是最明确的必读内容。一个小问题,如果我想在类型上传递两个参数?谁会工作?我试过:target_流派=[“冒险”,“历史];但它返回空的arrayYeah,这将不起作用,因为目标应该是一个字符串,而不是一个数组(您不能像这样交换东西)。但是,如果循环目标类型的数组并在该循环中运行上述代码,则无需更改代码即可完成。否则,您将在filter函数中循环目标流派,如果其中任何一个>=0,您将返回它。使用“找到的任何流派,找到的所有流派”更新答案。请注意,如果您可能要提交一个类型数组,那么您应该始终提交一个数组,即使它是一个长度为1的数组(这样,您就不必编写任何代码来表示“如果它不是数组,请这样做,如果是,请那样做”。它始终是一个数组,所以您总是这样做的)。
const filteredMoviesByGenreType = (data, genreType) => {
   // access to object with key "movies" in data via spread operator and dot notation and filtering by genreType
   return [...data.movies]
     .filter(movie => movie["genre"]
     .includes(genreType));
 }
filteredMoviesByGenreType(data, "Drama");

[[object Object] {
  alt: "Los juegos del hambre",
  cast: "Jennifer Lawrence, Josh Hutcherson, Elizabeth Banks, Woody Harrelson, Donald Sutherland, Stanley Tucci, Liam Hemsworth, Toby Jones, Lenny Kravitz, Wes Bentley, Paula Malcomson, Isabelle Fuhrman, Sandra Ellis Lafferty, Paula Malcomson, Kimiko Gelman, Nelson Ascencio, Brooke Bundy, Amandla Stenberg, Dayo Okeniyi, Leven Rambin, Jack Quaid, Latarsha Rose, Alexander Ludwig, Jacqueline Emerson",
  cover: "img/film_covers/losjuegosdelhambre.jpg",
  downloaddate: null,
  genre: ["Action", "Drama", "Science Fiction"],
  id: 2,
  length: 143,
  plot: "Lo que en el pasado fueron los Estados Unidos, ahora es una nación llamada Panem; un imponente Capitolio ejerce un control riguroso sobre los 12 distritos que lo rodean y que están aislados entre sí. Cada distrito se ve obligado a enviar anualmente un chico y una chica entre los doce y los dieciocho años para que participen en los Hunger Games, unos juegos que son transmitidos en directo por la televisión. Se trata de una lucha a muerte, en la que sólo puede haber un superviviente. Katniss Everdeen, una joven de dieciséis años, decide sustituir a su hermana en los juegos; pero para ella, que ya ha visto la muerte de cerca, la lucha por la supervivencia es su segunda naturaleza.",
  releasedate: "2011-12-31T23:00:00.000Z",
  title: "Los juegos del hambre"
}, [object Object] {
  alt: "Gladiator",
  cast: "Russell Crowe, Joaquin Phoenix, Connie Nielsen, Oliver Reed, Richard Harris, Ralf Moeller, Derek Jacobi, Djimon Hounsou, David Schofield, John Shrapnel, Spencer Treat Clark, Tomas Arana, David Hemmings, Tommy Flanagan, Sven-Ole Thorsen, Tony Curran, Giorgio Cantarini, Omid Djalili, Giannina Facio, Michael Sheen",
  cover: "img/film_covers/gladiator.jpg",
  downloaddate: null,
  genre: ["Action", "Adventure", "Drama", "Historical"],
  id: 3,
  length: 155,
  plot: "En el año 180, el Imperio Romano domina todo el mundo conocido. Tras una gran victoria sobre los bárbaros del norte, el anciano emperador Marco Aurelio (Richard Harris) decide transferir el poder a Máximo (Russell Crowe), bravo general de sus ejércitos y hombre de inquebrantable lealtad al imperio. Pero su hijo Cómodo (Joaquin Phoenix), que aspiraba al trono, no lo acepta y trata de asesinar a Máximo.",
  releasedate: "2000-04-30T22:00:00.000Z",
  title: "Gladiator"
}]