此问题在此处已有答案:
How to determine equality for two JavaScript objects?(82回答)
12天前关门了。
我有一个数据
var data = {
"variants": [{
"quantity": "20",
"varientId": 8,
"currency": "YEN",
"extraField": {
"Size": "10",
"Color": "Red",
"Material": "Denim"
},
"price": "199"
},
{
"quantity": "15",
"varientId": 10,
"currency": "YEN",
"extraField": {
"Size": "9",
"Color": "Red",
"Material": "Denim"
},
"price": "249"
},
{
"quantity": "18",
"varientId": 12,
"currency": "YEN",
"extraField": {
"Size": "8",
"Color": "Green",
"Material": "Rubber",
},
"price": "279"
}
]
}
字符串
和对象:
var obj = {
"Size": "10",
"Color": "Red",
"Material": "Denim"
}
型
我试过这个
var index = null
for(var l = 0; l<data.variants.length; l++){
if(data.variants[l].extraField === obj){
index = l
}
}
console.log(index)
型
我也试过使用JSON.stringify
:
JSON.stringify(data.variants[l].extraField) === JSON.stringify(obj)
型
当控制台记录索引变量时,我得到null,但我应该得到0,因为obj
对象匹配第一个变量的extrafield。
2条答案
按热度按时间nwlls2ji1#
您当前的方法不起作用的原因是,您试图使用
===
直接比较两个对象,这对对象不起作用。在JavaScript中,对象通过引用进行比较,而不是通过它们的内容进行比较,因此即使两个对象具有相同的键值对,它们也不会被认为是相等的,除非它们在内存中是相同的对象。要查找数组中匹配对象的索引,可以使用
JSON.stringify()
方法比较对象的字符串化版本。然而,有一种更有效和直接的解决方案,使用循环并比较各个属性。以下是您的问题的最简单解决方案:字符串
这段代码将正确地找到
data.variants
数组中与obj
对象的属性匹配的第一个对象的索引。它循环遍历每个变量,逐个比较属性,一旦找到匹配的变量就跳出循环,将索引赋给index
变量。ig9co6j12#
object与
===
的比较实际上是不起作用的,因为它们是不同的对象,并且您正在比较对它们的引用。或者,您可以使用shallow comparison
,检查每个属性。但是在这种情况下,通过JSON.stringify
进行比较是正确而简单的解决方案,并且它可以工作。通过运行此代码,控制台中将显示数字0
,这是所需对象的索引。字符串