Object.values 过滤 'keypress'

Object.values filter on 'keypress'

因为我正在使用此技术从 SWAPI.

获取虚拟数据
const httpStarwars$ = createHttpObservables('https://swapi.dev/api/films/');    
fromEvent<any>(this.sTxt.nativeElement,'keypress').pipe(
   map(event => event.target.value),
   debounceTime(400),
   distinctUntilChanged(),
   switchMap(val => httpStarwars$.pipe(
      map(res => Object.values(res["results"]))
   ))
).subscribe(courses => console.log(courses));

这是按键后的预期结果。

0: {title: "A New Hope", episode_id: 4, opening_crawl: "It is a period of civil war.
↵Rebel spaceships, st…er
↵people and restore
↵freedom to the galaxy....", director: "George Lucas", producer: "Gary Kurtz, Rick McCallum", …}
1: {title: "The Empire Strikes Back", episode_id: 5, opening_crawl: "It is a dark time for the
↵Rebellion. Although the… remote probes into
↵the far reaches of space....", director: "Irvin Kershner", producer: "Gary Kurtz, Rick McCallum", …}
2: {title: "Return of the Jedi", episode_id: 6, opening_crawl: "Luke Skywalker has returned to
↵his home planet of…
↵struggling to restore freedom
↵to the galaxy...", director: "Richard Marquand", producer: "Howard G. Kazanjian, George Lucas, Rick McCallum", …}
3: {title: "The Phantom Menace", episode_id: 1, opening_crawl: "Turmoil has engulfed the
↵Galactic Republic. The t…ustice in the
↵galaxy, to settle the conflict....", director: "George Lucas", producer: "Rick McCallum", …}
4: {title: "Attack of the Clones", episode_id: 2, opening_crawl: "There is unrest in the Galactic
↵Senate. Several t…THE REPUBLIC
↵to assist the overwhelmed
↵Jedi....", director: "George Lucas", producer: "Rick McCallum", …}
5: {title: "Revenge of the Sith", episode_id: 3, opening_crawl: "War! The Republic is crumbling
↵under attacks by t…ate mission to rescue the
↵captive Chancel

现在我想使用过滤器过滤上面数据的结果。

map(res => Object.values(res["results"]))

我要过滤的是title。到目前为止,我使用的是下面的这种技术。

map(res => Object.values(res["results"]).filter(j => j["title"] == res))

它给了我这样的空数组 []

更新 1:

更新二:

更新 1

我编辑我的答案以使用 Typescript。


我认为你想做的只是按标题过滤你的回复,所以你可以这样做:

interface Movie {
  title: string;
  episode_id: number;
}

const res = {};

res["results"] = { 
  0: {title: "A New Hope", episode_id: 4}, 
  1: {title: "The Empire Strikes Back", episode_id: 5 },
  2: {title: "Return of the Jedi", episode_id: 6}, 
  3: {title: "The Phantom Menace", episode_id: 1},
  4: {title: "Attack of the Clones", episode_id: 2} 
}

const result = Object.values(res["results"]).filter((movie: Movie) => movie.title === "A New Hope")

console.log(result)

请记得先验证 res["results"] 是否包含 object 和电影。