[英]Javascript Get index value of array by comparing string value to array
[英]Comparing array value in javascript?
我在我的项目中工作,我不得不比较一些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"});
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>');
}
}
这是我使用但不起作用的方法,该方法两次输出相同的事件名称。
var eventId;
for(var i=0; i< myRes.length; i++){
if(eventId === myRes[i].eventId){
$('#row_' + myRes[i].eventId).append('<td>'+myRes[i].rCustomer+'</td>');
}else{
eventId = myRes[i].eventId;
$('.myReservation').append('<tr id="row_'+myRes[i].eventId+'"><td><b>Event: '+myRes[i].eventName+'</b></td><td>'+myRes[i].rCustomer+'</td></tr>');
}
}
上面代码的输出:
Event: Test 1 Mike, Allan Gates, Bill
Event: Spring 2016 John, Bill Adams, Ron
Event: May Test 1 Steve, Marie
Event: Test 1 Ariel, Bill
Event: Fall 2016 Ron, Nill Kim, Alen Will, Huges Seth, Peak
我的问题是if语句中实际上发生了什么?
如果if语句基本上是在查找找到的数组中分配的特定ID,并且如果在找到的数组中不存在,则我的if语句的左侧为1,它将执行if语句? 或其他原因。
同样在else语句中,将新值分配给找到的数组并将其设置为1。 该特定ID是否设置为1?
如果有人可以向我解释这一点,我将不胜感激。 我试图将找到的数组输出到屏幕上,但是仍然不足以让我了解它的工作原理。 提前致谢。
第一个代码块起作用而第二个代码块不起作用的原因是,第二个代码块仅在连续时才检测重复的eventId
值。 第二种方法仅保留eventId
的最后一个不同的值,而第一种方法将所有它们保留在found
对象中,这是使其工作所需的。
如果您首先对eventId
排序myRes
数组,则第二种方法可以工作。
下面是它的工作原理。 这行:
found[myRes[i].eventId] = 1;
将found
数组中的数组元素设置为1。如果数组不够长,则将其设置为足够长。 当eventId
为42时(在1之前有42个空元素),它看起来可能像这样:
[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,1]
找到eventId
其他值后,同样会再次发生,并且在进行了几次这样的分配后,您将为found
数组得到类似的内容:
[,,,,,,,,,,1,,,,,,,,,,,,,1,,,1,,,,,,,1,,,,,,,,,1]
现在, if
语句将检查在与eventId
对应的索引处是否存在1。 如果是这种情况,以前就发现过。
注意,值1没有特别的意义。 您可以用true
或2做相同的事情。 只要您的测试与else
块中分配的值相同。
您的代码仅与最新的eventId
进行比较,因为只有一个变量。 如果您将myRes
按eventId
排序,则此方法可以正常工作,因为它将对同一事件的所有保留分组在一起,并且仅在组的开头显示一次事件名称。 但是,由于事件分散在数组中,因此只要事件名称更改,它就会显示事件名称,因此您可以多次获得它。
第一个代码的工作方式是将事件ID用作found
数组中的索引。 最初,该数组为空,因此found[anything]
将是未定义的。 遇到在循环的事件ID的第一次, found[myRes[i].eventId]
是未定义的,其作为治疗false
通过if
。 这使其转到else
块,该块显示事件名称并设置found[myRes[i].eventId] = 1
。 下次它在循环中遇到相同的事件ID时,测试成功,因此它将在if
块中执行代码,该代码仅显示客户数据。
例如, myRes[0].eventId
是42
。 所以循环的第一次迭代
if (found[42] === 1)
由于此操作失败,因此它将:
found[42] = 1;
在else
块中。 在循环的后续迭代中,当myRes[i].eventId
再次为42
(例如第二和第六个保留)时,测试
if (found[42] === 1)
将会成功。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.