JavaScript在filter函数中包含函数不工作?

tuwxkamq  于 2023-10-14  发布在  Java
关注(0)|答案(3)|浏览(112)

我有一个JavaScript过滤器功能的问题。
这是我对它应该如何工作的想法。
1.我需要检查一个对象是否在fetchedImage数组中(首先,所有的图像都不在数组中,因为数组是空的)。
1.所以我们将所有新的图像(不在fetchedImage数组中)推入队列数组。
1.第二次我们检查对象是否在数组中,它们将在数组中,因此没有图像进入队列数组。
我的代码结果显示,队列在不添加新图像的情况下保持增长。
我的代码:

let images = res.items;
if(images)
{
    // should return items that are not in the array
    let newImages = images.filter(image => {
        return fetchedImages.includes(image) == false; // ps: (image is object)
    })
                
    // add all new images into the queue array
    queue = [].concat(queue, newImages);
}

(我可能在过滤器功能中做错了什么,但我无法修复它)

slwdgvem

slwdgvem1#

在JavaScript中,不能安全地比较两个对象。要么使用图像对象的唯一属性进行比较,要么查看此SO帖子以获得其他解决方案:Object comparison in JavaScript

68bkxrlz

68bkxrlz2#

如果有人有同样的问题。我找到了一个工作解决方案与此特定的代码:

let newImages = images.filter(image => {
    return fetchedImages.find(fetchedImage => fetchedImage.name == image.name) == undefined
})

使用find方法

6ojccjat

6ojccjat3#

// Convert fetchedImages array to a Set of image names
const fetchedImageNames = new Set(fetchedImages.map(image => image.name));

// Filter images based on whether their names are in the fetchedImageNames Set
const newImages = images.filter(image => !fetchedImageNames.has(image.name));

相关问题