比较javascript中的数组值?

时间:2016-06-30 19:23:04

标签: 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"});

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语句中,为找到的数组和set分配了新值 到1.然后在找到的数组中实际看起来如何?这是具体的 ID设置为1?

  4. 如果有人能向我解释这一点,我将不胜感激。我试过了 输出发现数组到屏幕但仍然没有给我 足以理解这是如何工作的。提前致谢。

2 个答案:

答案 0 :(得分:1)

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

如果您首先在myRes上对eventId数组进行排序,则可以使用第二种方法。

关于方法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块中指定的值相同。

答案 1 :(得分:1)

您的代码仅与最新的eventId进行比较,因为只有一个变量。如果您myReseventId排序,则此功能正常,因为它会将同一事件的所有预留组合在一起,并且只在组的开头显示一次事件名称。但由于事件分散在数组中,它会在事件名称发生变化时显示,因此您可以多次获取事件名称。

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

例如,42if (found[42] === 1) 。所以循环的第一次迭代

found[42] = 1;

由于失败,它确实:

else
myRes[i].eventId块中的

。在循环的后续迭代中,当42再次if (found[42] === 1) 时(例如第2和第6次预订),测试

colors = {(97, 103, 105): 638059, (129, 140, 143): 562526, (55, 58, 62): 431610, (189, 193, 193): 460605}
normalizedcolors = [[i/256 for i in j] for j in colors.keys()]

import pylab as pl
import numpy as np
dict_index = np.arange(len(colors))
pl.bar(dict_index, colors.values(), align='center', width=0.5, color = normalizedcolors)
pl.xticks(dict_index, colors.keys())
ymax = max(colors.values()) + 1
pl.ylim(0, ymax)
pl.show()

会成功。