我正在处理我的项目,我必须比较一些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语句中,为找到的数组和set分配了新值 到1.然后在找到的数组中实际看起来如何?这是具体的 ID设置为1?
如果有人能向我解释这一点,我将不胜感激。我试过了 输出发现数组到屏幕但仍然没有给我 足以理解这是如何工作的。提前致谢。
答案 0 :(得分:1)
第一个代码块工作的原因和第二个代码块不工作的原因是,第二个代码块连续时仅检测到重复的eventId
值。第二种方法仅保留eventId
的最后一个不同值,而第一种方法将所有值保留在found
对象中,这就是使其工作所需的内容。
如果您首先在myRes
上对eventId
数组进行排序,则可以使用第二种方法。
以下是它的工作原理。这一行:
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
进行比较,因为只有一个变量。如果您myRes
按eventId
排序,则此功能正常,因为它会将同一事件的所有预留组合在一起,并且只在组的开头显示一次事件名称。但由于事件分散在数组中,它会在事件名称发生变化时显示,因此您可以多次获取事件名称。
第一个代码的工作方式是它使用事件ID作为found
数组中的索引。最初数组为空,因此found[anything]
将是未定义的。第一次在循环中遇到事件ID时,found[myRes[i].eventId]
将被取消定义,false
被if
视为else
。这使得它转到found[myRes[i].eventId] = 1
块,该块显示事件名称并设置if
。下次在循环中遇到相同的事件ID时,测试会成功,因此它会执行myRes[0].eventId
块中的代码,该代码只显示客户数据。
例如,42
为if (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()
会成功。