Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较javascript中的数组值?_Javascript_Jquery_Arrays - Fatal编程技术网

比较javascript中的数组值?

比较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

我在做我的项目,我必须比较一些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>');
    }
}
  • 我的问题是在我的if语句中实际发生了什么

  • if语句基本上查找指定的特定id吗 在找到的数组中,如果在找到的数组中不存在,则位于左侧 我的if语句的值是1,它将执行if语句?还是什么 这背后还有其他原因

  • 另外,在else语句中,新值被分配给找到的数组和集合 对1。那么,在find数组中,它实际上是什么样子的呢?那是具体的吗 ID设置为1

  • 如果有人能向我解释这一点,我将不胜感激。我试着 输出在屏幕上找到数组,但仍然没有给我 足以理解这是如何工作的。提前谢谢


  • 第一个代码块起作用而第二个代码块不起作用的原因是,第二个代码块仅在连续时检测重复的
    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)