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 和电影。
因为我正在使用此技术从 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 和电影。