我有一个对象数组,我想从中过滤不同的电影标题并创建另一个对象数组。
var movs = [
{
"Id": 3446,
"FilmId": "ST00000358",
"FilmPackageId": null,
"Title": "Harry Potter and the Goblet of Fire",
},
{
"Id": 3447,
"FilmId": "ST00000358",
"FilmPackageId": null,
"Title": "Harry Potter and the Goblet of Fire",
},
{
"Id": 3448,
"FilmId": "ST00000359",
"FilmPackageId": null,
"Title": "Harry Potter and the Order of the Phoenix",
},
{
"Id": 3449,
"FilmId": "ST00000360",
"FilmPackageId": null,
"Title": "Spider-Man: Into The Spider-Verse",
},
{
"Id": 3450,
"FilmId": "ST00000360",
"FilmPackageId": null,
"Title": "Spider-Man: Into The Spider-Verse",
}
]
我想创建一个对象数组,这些对象过滤到不同的电影标题及其 ID。
[
{
Title: 'Harry Potter and the Goblet of Fire',
FilmId: 'ST00000358'
},
{
Title: 'Harry Potter and the Order of the Phoenix',
FilmId: 'ST00000359'
},
{
Title: 'Spider-Man: Into The Spider-Verse',
FilmId: 'ST00000360'
}
]
我已经成功地获得了一系列不同的标题,如下所示,但是如果我向地图添加其他字段,它会返回整个数组,而不是不同的少数。
const movies = [...new Set(movs.map(item => item.Title))];
这不起作用:
const movies = [
...new Set(
movs.map((obj) => ({ label: obj.Title, value: obj.FilmId }))
)
];
您可以filter
基于特定的键使用 aSet
然后使用map
。
var movs = [{ "Id": 3446, "FilmId": "ST00000358", "FilmPackageId": null, "Title": "Harry Potter and the Goblet of Fire", }, { "Id": 3447, "FilmId": "ST00000358", "FilmPackageId": null, "Title": "Harry Potter and the Goblet of Fire", }, { "Id": 3448, "FilmId": "ST00000359", "FilmPackageId": null, "Title": "Harry Potter and the Order of the Phoenix", }, { "Id": 3449, "FilmId": "ST00000360", "FilmPackageId": null, "Title": "Spider-Man: Into The Spider-Verse", }, { "Id": 3450, "FilmId": "ST00000360", "FilmPackageId": null, "Title": "Spider-Man: Into The Spider-Verse", } ];
let set = new Set();
const res = movs.filter(({FilmId})=>!set.has(FilmId) && set.add(FilmId)).map(({Title,FilmId})=>({Title,FilmId}));
console.log(res);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句