gpt4 book ai didi

javascript - 使用 AlbumIds 在照片数组中查找每个相册中的第一张照片

转载 作者:行者123 更新时间:2023-11-28 17:02:57 25 4
gpt4 key购买 nike

我需要找到每个相册的第一张照片。照片列在一个数组中,其中每张照片上都包含一个 albumId,如下所示:

[ { 编号: 1, 专辑ID: 1, }, { 编号: 2, 专辑ID: 1, }, { 编号: 3, 专辑ID: 2, }, { 编号: 4, 专辑ID: 2, }]

所以每个对象都是一张照片,连接在一个相册中。我想做的是迭代这个数组并创建一个新数组,其中仅包含每个相册中的第一张照片,假设原始数组是有序的(因此第一次出现新的 albumId 时,您可以假设这是第一张照片)相册中的照片)。

目前这是我的代码:

let lastAlbumId = null;
const newAlbumArray = [];

albums.forEach(photo => {
if (lastAlbumId === null) {
lastAlbumId = photo.albumId;
newAlbumArray.push(photo);
} else if (lastAlbumId !== photo.albumId) {
lastAlbumId = photo.albumId;
newAlbumArray.push(photo);
}
});

return newAlbumArray;

这段代码可以工作,但我觉得必须有一种更干净的方法来使用像filter()或find()这样的东西来做到这一点,有什么建议吗?

最佳答案

您可以使用Array.filter()Set跟踪已添加的专辑:

const photos = [{ id: 1, albumId: 1, }, { id: 2, albumId: 1, }, { id: 3, albumId: 2, }, { id: 4, albumId: 2, } ]

const albums = new Set();
const result = photos.filter(o => !albums.has(o.albumId) && albums.add(o.albumId))

console.log(result)

另一个选择是 reduce数组为 Map ,使用 albumId 作为键。仅当相册 ID 尚不存在时,才可以将照片添加到 map 中。完成后,我们将 Map 转换为数组 spreading map 的values iterator :

const photos = [{ id: 1, albumId: 1, }, { id: 2, albumId: 1, }, { id: 3, albumId: 2, }, { id: 4, albumId: 2, } ]

const result = [...photos.reduce((m, o) => m.has(o.albumId) ? m : m.set(o.albumId, o), new Map).values()]

console.log(result)

关于javascript - 使用 AlbumIds 在照片数组中查找每个相册中的第一张照片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819555/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com