运算符比较返回错误的值



我在编程方面有一些很好的经验,但我是Javascript的新手。在if函数中进行比较时,我遇到了一个意外的结果。在下面的函数中,if.function中有一个双重比较。当.name已经在列表中时,第一个比较应该返回false。但是其中一个测试返回一个工作日发生两次的集合。在调试器中,比较ls.name != MPopArray[0].name返回true,基本上说"Saturday"!="Saturday"为true。所以我的问题是,它是如何得到这个结果的?

function mostPopularDays(week) {
week.sort(function (a,b) {return b.traffic-a.traffic})
var       highestTraffic = week[0].traffic
var       MPopArray      = []
MPopArray[0]             = week[0].name
for (const ls of week) {
if ((ls.name != MPopArray[0].name) && (ls.traffic==highestTraffic)) {
MPopArray.push(ls.name)
}
}
return MPopArray
}

该函数在一周中进行迭代,并确定一周中哪一天的流量最高。如果一周中有一天以上的流量相同,则会将该天附加到列表中。(例如["星期三"、"星期四"](。中的第一个条件

测试数据集

var Test1MPD = [
{ name: 'Thursday', traffic: 100 },
{ name: 'Friday', traffic: 100 },
{ name: 'Saturday', traffic: 101 }
];
var Test1ResultMPD = mostPopularDays(Test1MPD)
console.log(Test1MPD) 
console.log(Test1ResultMPD)

在我使用的测试数据集上,我期望ls.name!=MPopArray[0].name返回错误条件。

函数返回的结果

 ["Saturday", "Saturday"]

您可以对数组进行排序,获取用于比较以下项的traffic的索引,并将实际名称推送到结果集。

function mostPopularDays(week) {
var index = 0,
result = [];
week.sort((a, b) => b.traffic - a.traffic);
while (index < week.length && week[0].traffic === week[index].traffic) {
result.push(week[index++].name);
}
return result;
}
var test1MPD = [{ name: 'Thursday', traffic: 100 }, { name: 'Friday', traffic: 100 }, { name: 'Saturday', traffic: 101 }];
console.log(mostPopularDays(test1MPD));

最新更新