Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中查找最近的日期_Javascript_Html_Arrays_Function_Date - Fatal编程技术网

Javascript 在数组中查找最近的日期

Javascript 在数组中查找最近的日期,javascript,html,arrays,function,date,Javascript,Html,Arrays,Function,Date,我试图在一组对象中找到最高的日期,这些对象的日期各不相同,每个对象都有不同的属性。只要日期在1970年1月1日以上,代码就可以正常工作,但在此之前的任何日期都会导致错误。显然,我要保持相同的日期,如何解决这个问题?我知道我可以在所有的日期上使用get(时间),但是有什么办法吗?谢谢 var playerData=[ {姓名:“约翰”}, {name:“Bill”}, {name:“Bob”}, {姓名:“吉姆”}, ]; var dateOne=新日期(1940,02,05); var dat

我试图在一组对象中找到最高的日期,这些对象的日期各不相同,每个对象都有不同的属性。只要日期在1970年1月1日以上,代码就可以正常工作,但在此之前的任何日期都会导致错误。显然,我要保持相同的日期,如何解决这个问题?我知道我可以在所有的日期上使用get(时间),但是有什么办法吗?谢谢

var playerData=[
{姓名:“约翰”},
{name:“Bill”},
{name:“Bob”},
{姓名:“吉姆”},
];
var dateOne=新日期(1940,02,05);
var dateTwo=新日期(1950,06,18);
var dateThree=新日期(1650,07,12);
var dateFour=新日期(1300,03,25);
playerData[0]。日期=dateOne;
playerData[1]。日期=日期二;
playerData[2]。日期=日期三;
playerData[3]。日期=日期四;
函数findHighDate(){
var highDateSoFar=null;
var结果;
对于(变量i=0;ihighDateSoFar){
结果=播放数据[i];
highDateSoFar=playerData[i]。日期;
}
else如果(playerData[i].date==highDateSoFar){
结果='相等';
}
}
返回结果;
}
var highPlayer=findHighDate();
var highPlayerName=highPlayer.name;
var highPlayerIndex=playerData.indexOf(highPlayer);
var highPlayerDate=highPlayer.date;
log({highPlayer}、{highPlayerIndex}、{highPlayerName}、{highPlayerDate})如果在日期上使用
getTime()
,那么1970年之前的日期将是负数,因此通常的数学比较工作正常。下面我简单地按日期对玩家数据进行排序(最大值优先)。如果您想要最高的,只需抓取数组中的第一项:

var playerData=[
{姓名:“约翰”},
{name:“Bill”},
{name:“Bob”},
{姓名:“吉姆”},
]
playerData[0]。日期=新日期(1940、02、05)
playerData[1]。日期=新日期(1950、06、18)
playerData[2]。日期=新日期(1650,07,12)
playerData[3]。日期=新日期(1300,03,25)
playerData.sort((a,b)=>b.date.getTime()-a.date.getTime())

console.log(playerData)
您可以预先指定第一个人的日期来进行这样的比较

var playerData = [
    {name: "John"},
    {name: "Bill"},
    {name: "Bob"},
    {name: "Jim"},

];

var dateOne = new Date(1940,02,05);
var dateTwo = new Date(1950, 06,18);
var dateThree = new Date(1650,07,12);
var dateFour = new Date(1300, 03,25);

playerData[0].date = dateOne;
playerData[1].date = dateTwo;
playerData[2].date = dateThree;
playerData[3].date = dateFour;

function findHighDate() {
    console.log(playerData);
    var highDateSoFar = playerData[0].date;
    var result = playerData[0];
    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) {    

    }
    }
    return result;
}

var highPlayer = findHighDate();
var highPlayerName = highPlayer.name;
var highPlayerIndex = playerData.indexOf(highPlayer);
var highPlayerDate = highPlayer.date;
console.log({highPlayer},{highPlayerIndex},{highPlayerName},{highPlayerDate});
var playerData=[
{姓名:“约翰”},
{name:“Bill”},
{name:“Bob”},
{姓名:“吉姆”},
];
var dateOne=新日期(1940,02,05);
var dateTwo=新日期(1950,06,18);
var dateThree=新日期(1650,07,12);
var dateFour=新日期(1300,03,25);
playerData[0]。日期=dateOne;
playerData[1]。日期=日期二;
playerData[2]。日期=日期三;
playerData[3]。日期=日期四;
函数findHighDate(){
console.log(playerData);
var highDateSoFar=playerData[0]。日期;
var结果=播放数据[0];
对于(变量i=0;ihighDateSoFar){
结果=播放数据[i];
highDateSoFar=playerData[i]。日期;
}
else如果(playerData[i].date==highDateSoFar){
}
}
返回结果;
}
var highPlayer=findHighDate();
var highPlayerName=highPlayer.name;
var highPlayerIndex=playerData.indexOf(highPlayer);
var highPlayerDate=highPlayer.date;
log({highPlayer}、{highPlayerIndex}、{highPlayerName}、{highPlayerDate});

您可以比较字符串并使用数组,而不是比较日期。排序
以降序排列,然后获取第一项:

const playerData=[
{姓名:“约翰”,日期:'1940-02-05'},
{名称:“法案”,日期:'1950-06-18'},
{姓名:“鲍勃”,日期:'1650-07-12'},
{姓名:“吉姆”,日期:'1300-03-25'},
];
函数findHighDate(){
返回playerData.sort((a,b)=>b.date.localeCompare(a.date))[0];
}
const highPlayer=findHighDate();
const highPlayerName=highPlayer.name;
常量highPlayerIndex=playerData.indexOf(highPlayer);
const highPlayerDate=新日期(highPlayer.Date);

log({highPlayer,highplayerdex,highPlayerName,highPlayerDate})您可以这样做。我简化了逻辑。您也可以像其他人建议的那样使用sort()

var playerData=[
{姓名:“约翰”},
{name:“Bill”},
{name:“Bob”},
{姓名:“吉姆”},
];
var dateOne=新日期(1940,02,05);
var dateTwo=新日期(1950,06,18);
var dateThree=新日期(1650,07,12);
var dateFour=新日期(1300,03,25);
playerData[0]。日期=dateOne;
playerData[1]。日期=日期二;
playerData[2]。日期=日期三;
playerData[3]。日期=日期四;
函数player的最高级日期(){
//首先假设玩家0是最高的
var=0;
//从一开始,因为我们不需要与玩家0进行比较
对于(变量i=1;i=playerData[winner].date){
获胜者=我;
}
}
//返回优胜者索引
返回赢家;
}
//获取具有最高日期的索引
var highPlayerIndex=playerWithHighestDate();
var highPlayer=playerData[highPlayerIndex];
var highPlayerName=highPlayer.name;
var highPlayerDate=highPlayer.date;

log({highPlayer}、{highPlayerIndex}、{highPlayerName}、{highPlayerDate})使用
对数字进行协同运算在大多数情况下都有效,但是当与数字进行比较时,null的计算结果为0,因此负数小于null

因此,只需通过将highDateSoFar初始化为其他值(例如无穷大或数组中的第一个日期)或测试它是否为null来避免这种比较

var playerData=[
{姓名:“约翰”,日期:新日期(1940年2月5日)},
{名称:“法案”,日期:新日期(1950年6月18日)},
{姓名:“鲍勃”,日期:新日期(1650,7,12)},
{姓名:“吉姆”,日期:新日期(1300、3、25)},
];
函数findHighDate(数据){
var highDateSoFar=null;
var结果;
对于(变量i=0;ihighDateSoFar){
结果=数据[i];
highDateSoFar=数据[i]。日期;
}
}
返回结果;
}
console.log(findHighD