【问题标题】:Getting highest date from array of dates before 1970从 1970 年之前的日期数组中获取最高日期
【发布时间】:2019-02-17 01:31:08
【问题描述】:

为什么我的代码不起作用?我想一旦我在日期上使用 getTime() 而不是尝试比较它会起作用的日期,但它没有。请帮忙。我也意识到现在这个例子可能是平等的,但对于我的实际项目来说,它可能是这样,所以请不要免除任何答案。谢谢。

var x = new Date(1960,07,16);
var y = new Date(1950,04,28);
var z = new Date(1940,01,07);
    
var playerData = [
    {name: "John", date: x.getTime()},
    {name: "Bill", date: y.getTime()},
    {name: "Greg", date: z.getTime()},
    
];

function findHighScore() {
    var highDateSoFar = null;
    var result;
    for (var i = 0; i < playerData.length; i++) {
        if (playerData[i].date > highDateSoFar) {
            result = playerData[i];
            highDateSoFar = playerData[i].date;
        }
        else if (playerData[i].date === highDateSoFar) {	
            result = 'equal';
        
    }
    }
    return result;
}
    
var highPlayer = findHighScore();
var highPlayerName = highPlayer.name;
var highPlayerDate = highPlayer.date;
var highPlayerIndex = playerData.indexOf(highPlayer);
console.log({highPlayer});

【问题讨论】:

    标签: javascript function sorting date


    【解决方案1】:

    您的问题是您将highDateSoFar 初始化为null。当您对 null 进行大于比较时,您将不会得到您正在寻找的结果。将初始化更改为var highDateSoFar = -Number.MAX_VALUE。这会将它作为可能的最低值开始,因此第一次比较肯定会为真。

    var x = new Date(1960,07,16);
    var y = new Date(1950,04,28);
    var z = new Date(1940,01,07);
        
    var playerData = [
        {name: "John", date: x.getTime()},
        {name: "Bill", date: y.getTime()},
        {name: "Greg", date: z.getTime()},
        
    ];
    
    function findHighScore() {
        var highDateSoFar = -Number.MAX_VALUE;
        var result;
        for (var i = 0; i < playerData.length; i++) {
            if (playerData[i].date > highDateSoFar) {
                result = playerData[i];
                highDateSoFar = playerData[i].date;
            }
            else if (playerData[i].date === highDateSoFar) {	
                result = 'equal';
            
        }
        }
        return result;
    }
        
    var highPlayer = findHighScore();
    var highPlayerName = highPlayer.name;
    var highPlayerDate = highPlayer.date;
    var highPlayerIndex = playerData.indexOf(highPlayer);
    console.log({highPlayer});

    【讨论】:

    • 谢谢,这行得通。顺便说一句,我忘了包括你知道我该怎么做,所以如果两个或多个日期相等,它将返回所有具有相同日期的玩家的对象?
    • 使用数组。如果比较等于高值,则将其推送到数组。如果它更大,则创建一个仅包含该数组的新数组。
    • "这会将它作为可能的最低值开始",但-Infinity 除外,它的输入也更少。 :-)
    • @RobG 感谢您的提示。奇怪的是,使用 Infinity 有什么性能差异?
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2023-04-09
    • 2023-03-16
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    相关资源
    最近更新 更多