繁体   English   中英

比较数组值在JavaScript?

[英]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
  1. 我的问题是if语句中实际上发生了什么?

  2. 如果if语句基本上是在查找找到的数组中分配的特定ID,并且如果在找到的数组中不存在,则我的if语句的左侧为1,它将执行if语句? 或其他原因。

  3. 同样在else语句中,将新值分配给找到的数组并将其设置为1。 该特定ID是否设置为1?

  4. 如果有人可以向我解释这一点,我将不胜感激。 我试图将找到的数组输出到屏幕上,但是仍然不足以让我了解它的工作原理。 提前致谢。

第一个代码块起作用而第二个代码块不起作用的原因是,第二个代码块仅在连续时才检测重复的eventId值。 第二种方法仅保留eventId的最后一个不同的值,而第一种方法将所有它们保留在found对象中,这是使其工作所需的。

如果您首先对eventId排序myRes数组,则第二种方法可以工作。

关于方法1

下面是它的工作原理。 这行:

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进行比较,因为只有一个变量。 如果您将myReseventId排序,则此方法可以正常工作,因为它将对同一事件的所有保留分组在一起,并且仅在组的开头显示一次事件名称。 但是,由于事件分散在数组中,因此只要事件名称更改,它就会显示事件名称,因此您可以多次获得它。

第一个代码的工作方式是将事件ID用作found数组中的索引。 最初,该数组为空,因此found[anything]将是未定义的。 遇到在循环的事件ID的第一次, found[myRes[i].eventId]是未定义的,其作为治疗false通过if 这使其转到else块,该块显示事件名称并设置found[myRes[i].eventId] = 1 下次它在循环中遇到相同的事件ID时,测试成功,因此它将在if块中执行代码,该代码仅显示客户数据。

例如, myRes[0].eventId42 所以循环的第一次迭代

if (found[42] === 1)

由于此操作失败,因此它将:

found[42] = 1;

else块中。 在循环的后续迭代中,当myRes[i].eventId再次为42 (例如第二和第六个保留)时,测试

if (found[42] === 1)

将会成功。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM