比较javascript中的数组值?
我在做我的项目,我必须比较一些ID,检查它们是否相同。我第一次看到这样的东西比较javascript中的数组值?,javascript,jquery,arrays,Javascript,Jquery,Arrays,我在做我的项目,我必须比较一些ID,检查它们是否相同。我第一次看到这样的东西 if (found[myRes[i].eventId] === 1) { 我有一个数组myRes,看起来像这样: myRes.push({'eventId':42,'eventName':"Test 1",'rCustomer':"Mike, Allan"}); myRes.push({'eventId':42,'eventName':"Test 1",'rCustomer':"Gates, Bill"}); m
if (found[myRes[i].eventId] === 1) {
我有一个数组myRes,看起来像这样:
myRes.push({'eventId':42,'eventName':"Test 1",'rCustomer':"Mike, Allan"});
myRes.push({'eventId':42,'eventName':"Test 1",'rCustomer':"Gates, Bill"});
myRes.push({'eventId':19,'eventName':"Spring 2016",'rCustomer':"John, Bill"});
myRes.push({'eventId':19,'eventName':"Spring 2016",'rCustomer':"Adams, Ron"});
myRes.push({'eventId':31,'eventName':"May Test 1",'rCustomer':"Steve, Marie"});
myRes.push({'eventId':42,'eventName':"Test 1",'rCustomer':"Ariel, Bill"});
myRes.push({'eventId':32,'eventName':"Fall 2016",'rCustomer':"Ron, Nill"});
myRes.push({'eventId':32,'eventName':"Fall 2016",'rCustomer':"Kim, Alen"});
myRes.push({'eventId':32,'eventName':"Fall 2016",'rCustomer':"Will, Huges"});
myRes.push({'eventId':32,'eventName':"Fall 2016",'rCustomer':"Seth, Peak"});
我有我的问题的解决方案,但我不完全理解它是如何工作的。以下是我使用的代码:
var found = [];
for (var i = 0; i < myRes.length; i++) {
if (found[myRes[i].eventId] === 1) {
$('#row_' + myRes[i].eventId).append('<tr><td>'+myRes[i].some element+'</td></tr></tbody></table>');
} else {
found[myRes[i].eventId] = 1;
$('.myReservation').append('<table><tr></tr><thead><tr><th >'+myRes[i].eventName+'</th></tr></thead><tbody id="row_' + myRes[i].eventId + '"><tr><td>'+myRes[i].someelement+'</td></tr>');
}
}
第一个代码块起作用而第二个代码块不起作用的原因是,第二个代码块仅在连续时检测重复的
eventId
值。第二个方法只保留eventId
的最后一个不同值,而第一个方法在found
对象中保留所有值,这是使其工作所需的
如果您首先在eventId
上对myRes
数组进行排序,则第二种方法可以工作
关于方法1
下面是它的工作原理。这一行:
found[myRes[i].eventId] = 1;
将found
数组中的数组元素设置为1。如果阵列还不够长,则会使其足够长。当eventId
为42时(1前面有42个空元素),它可能是这样的:
当找到eventId
的其他值时,同样的情况再次发生,在进行了几次这样的赋值之后,对于found
数组,您会得到如下结果:
[,,,,,,,,,,1,,,,,,,,,,,,,1,,,1,,,,,,,1,,,,,,,,,1]
现在,if
语句将检查eventId
对应的索引处是否有1。如果是这样的话,那是以前发现的
请注意,值1没有特殊意义。您可以对
true
或2执行同样的操作。只要您的测试与else
块中指定的测试值相同。您的代码仅与最近的事件ID
进行比较,因为只有一个变量。如果您有按eventId
排序的myRes
,这将正常工作,因为它将对同一事件的所有预订进行分组,并且只在组的开头显示一次事件名称。但是,由于事件分散在数组中,因此每当事件名称发生更改时,它都会显示事件名称,因此您可以多次获得它
第一个代码的工作方式是使用事件ID作为found
数组中的索引。最初数组是空的,因此found[anything]
将是未定义的。当它第一次在循环中遇到事件ID时,find[myRes[i].eventId]
将被未定义,它将被if
视为false
。这使它转到else
块,该块显示事件名称并设置found[myRes[i].eventId]=1
。下次它在循环中遇到相同的事件ID时,测试成功,因此它在if
块中执行代码,该块仅显示客户数据
例如,myRes[0]。eventId
是42
。循环的第一次迭代就是这样
if (found[42] === 1)
由于这失败了,它确实:
found[42] = 1;
在else
块中。在循环的后续迭代中,当myRes[i].eventId
再次42
(例如第2次和第6次保留)时,测试
if (found[42] === 1)
将成功。您的eventId键正在存储字符串值。当您使用“==”时,您是说这必须是完全匹配的。在这种情况下,“1”不等于1。您在第二个代码块中有输入错误,或者没有提供完整的工作代码:您似乎没有
myId
属性,这意味着您将undefined
分配给else
块中的evenId
变量,从那时起,如果条件在其余迭代中始终为true
。@MikeCheel他没有与eventID
键进行比较,他使用eventID
作为found
中的键,并将整数存储在found
中。什么是confId
?另一个打字错误?@Barmar这篇文章已经编辑过了。我在解释if'if(eventId==myRes[I].eventId'),他的原始数据样本的值是字符串,而不是现在的数字。我相信前面也有一个confId值。谢谢你的回答!还有一个问题,if(发现[myRes[i].eventId]==1)中实际发生了什么,以及在这部分中发现[myRes[i].eventId]=1?他的困惑是在一个更基本的层面上,他不理解发现[myRes[0].eventId]=1
有什么作用。添加了一个解释。巴马尔回答了我的问题。我现在更好地理解了每种代码的工作原理。谢谢!你需要学习基本语法。当您看到像found[myRes[i].eventId]=1这样的表达式时,请将其分解为多个部分。首先了解myRes[i].eventId是什么,然后它只是使用它作为found
数组中的索引。我知道myRes[i].eventId中存储了什么,但我不知道如果我把它放在数组中,它是如何工作的,以及它是如何等于1的。行found[XXX]=1
将它设置为1,这不应该让人困惑。例如,它是否为索引42存储值1?
if (found[42] === 1)
found[42] = 1;
if (found[42] === 1)