gpt4 book ai didi

javascript - 检查数组是否包含没有引用的对象

转载 作者:行者123 更新时间:2023-11-29 14:42:08 25 4
gpt4 key购买 nike

我有以下功能:

function containsObject(object, array) {
for (var i = 0; i < array.length; i++) {
if (array[i] === object) {
return i;
}
}

return false;
}

以下数组:

var array = [
{
name: 'test1',
age: 12
},
{
name: 'test2',
age: 14
}
];

而且我需要检查以下对象是否在数组中:

var object = {
name: 'test1',
age: 12
};

但是当我使用函数检查数组是否包含对象时:

console.log(containsObject(object, array));

它将返回false,因为对象的引用不同。所以从技术上讲,对象是不一样的。

如何在不共享引用文献的情况下继续进行此操作?

最佳答案

fiddle :https://jsfiddle.net/thatOneGuy/3ys6s7sy/2/

您必须将对象的每个元素与另一个对象的每个元素进行检查。

function containsObject(object, array) {
for (var i = 0; i < array.length; i++) {
var count = 0;
var matching = true;
for (var key in object) {
if (array[i][key] === object[key]) {
matching = true;
if (count == Object.keys(array[i]).length - 1 && matching) {
return i;
} else {
count++;
}
} else {
matching = false;

}
}
}
return false;
}

var array = [{
name: 'test2',
age: 14
}, {
name: 'test1',
age: 12
}];

var thisObject = {
name: 'test1',
age: 12
};

console.log(containsObject(thisObject, array));

我更改了周围的数据以查看它是否有效。它现在正确记录“我”。如果您有很多数据要比较,这会很慢。您始终可以将两个对象字符串化并比较两个字符串?

这是那个函数:

function containsObject(object, array) {
for (var i = 0; i < array.length; i++) {
for (var key in object) {
//if (array[i][key] === object[key]) {
// return i;
//}
if (JSON.stringify(array[i]) === JSON.stringify(object)) {
return i;
}
}
}
return false;
}

如评论中所述,第一个不适合深度比较。而 stringify 会。不过,我会小心对象的顺序不同。例如,如果您使用此对象:

var thisObject = {
age: 12,
name: 'test1'
};

要进行比较,它不会起作用,因为它只是一个直接的字符串比较。

摆弄字符串化:https://jsfiddle.net/thatOneGuy/3ys6s7sy/1/

关于javascript - 检查数组是否包含没有引用的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37210703/

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