gpt4 book ai didi

javascript比较数组中的对象

转载 作者:行者123 更新时间:2023-11-30 18:43:51 25 4
gpt4 key购买 nike

我在页面上有一个图片网格。而且,我想定期将一个对象换成我在对象数组中的 50 个对象中的一个 - 但前提是它们尚未在网格中。最后一部分是我的代码未能做到的。

我首先获取所有 50 个项目,并将它们放入一个 allmedia 数组中:

// initialize
var allmedia = getAllMedia();
var imagesInGrid = [];

当我将项目放入网格时,我将添加到一个网格项目数组中:

imagesInGrid.push(allmedia [i]); // while looping to fill DOM grid

然后,我每隔 8 秒运行一次 getRandomImage() 例程,该例程从 allmedia 数组中随机获取图像,然后测试它以查看它是否已经在 DOM 中。

function getRandomImageNotInGrid(){
var randomNumber = Math.floor(Math.random() * allmedia.length);
if (!isInArray(allmedia[randomNumber], imagesInGrid)) {
return allmedia[randomNumber];
} else {
return getRandomImageNotInGrid();
}
}

function isInArray(item, arr) {
if(arr[0]===undefined) return false;
for (var i=arr.length;i--;) {
if (arr[i]===item) {
return true;
}
}
return false;
}

但是当我单步执行代码时,(arr[i]===item) 测试失败了。我可以看到这两个对象完全相同,但 === 并不认为这是真的。

这是 ByReference/ByValue 问题吗?我做错了什么?

控制台日志:

arr[i]===item
false
arr[i]==item
false
typeof item
"object"
typeof arr[i]
"object"

编辑::

在下面的输出中,我不明白为什么 arr[0] 与 'item' 不同。我使用与将项目放入页面时完全相同的对象放入 allmedia,并相应地更新 imagesInGrid。

console.dir(arr[0]);
Object
caption: Object
comments: Object
created_time: "1305132396"
filter: "Poprocket"
id: "69204668"
images: Object
likes: Object
link: "http://instagr.am/p/EH_q8/"
location: Object
tags: Array[2]
type: "image"
user: Object
__proto__: Object

console.dir(item);
Object
caption: Object
comments: Object
created_time: "1305132396"
filter: "Poprocket"
id: "69204668"
images: Object
likes: Object
link: "http://instagr.am/p/EH_q8/"
location: Object
tags: Array[2]
type: "image"
user: Object
__proto__: Object

最佳答案

不是从所有媒体中随机选择一个,而是从所有媒体中删除一个吗?

var randomNumber = Math.floor(Math.random() * allmedia.length);
imagesInGrid.push(allmedia.splice(randomNumber,1));

关于javascript比较数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051803/

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