【问题标题】:Operator comparison returns wrong value运算符比较返回错误值
【发布时间】:2020-02-24 15:13:03
【问题描述】:

我在编程方面有一些很好的经验,但我是 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
}

该函数遍历一周并确定一周中哪一天的流量最高。如果一周中多于一天的流量相同,则将这一天附加到列表中。(例如 ["Wednesday", "Thursday"])。

中的第一个条件

测试数据集

    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"]

【问题讨论】:

  • week[0].name 是一个字符串,那么它不能包含name 属性。只需比较ls.name != MPopArray[0]
  • 那行得通。我没有正确引用数组。

标签: javascript comparison operator-keyword


【解决方案1】:

您可以对数组进行排序,获取用于比较以下项目的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));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 2012-10-17
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    相关资源
    最近更新 更多