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