使用javascript获取数组的第一个和第二个最高值
我正在尝试执行以下代码:使用javascript获取数组的第一个和第二个最高值,javascript,arrays,max,Javascript,Arrays,Max,我正在尝试执行以下代码: function oldestAges(ages){ if (ages == []){ return [0,0]; }else{ var max = Math.max.apply(null, ages); ages.splice(ages.indexOf(max), 1); var max2 = Math.max.apply(null, ages); return [ma
function oldestAges(ages){
if (ages == []){
return [0,0];
}else{
var max = Math.max.apply(null, ages);
ages.splice(ages.indexOf(max), 1);
var max2 = Math.max.apply(null, ages);
return [max2,max];
}
}
但是,当测试[]作为ages时,预期的值是“[0,0]”,而不是“[-Infinity,-Infinity]”
还有,有没有更简单的方法来完成同样的任务?我这样问是因为使用R我可以用更少的行数得到相同的结果。我仍然是javascript中的noob。您可以按降序对数组排序,以便前两个元素包含最高值
ages.sort((a, b) => b - a);
现在
ages[0]
和ages[1]
包含两个最大的数字。您可以按降序排列数组,以便前两个元素包含最高的值
ages.sort((a, b) => b - a);
现在ages[0]
和ages[1]
包含两个最大的数字。实现这一点的简单方法(不确定最佳方法):
const input=[5150,2,8,58,4];
const result=input.sort((x,y)=>y-x).slice(0,2);
控制台日志(结果)代码>实现此目的的简单方法(不确定最佳方法):
const input=[5150,2,8,58,4];
const result=input.sort((x,y)=>y-x).slice(0,2);
控制台日志(结果)
ages.length==0
是用来查看数组中的元素数是否为零的
您的代码有一个错误,您说if(ages=[])
试试这个
function oldestAges(ages){
if (ages.length == 0){
return [0,0];
}else{
var max = Math.max.apply(null, ages);
ages.splice(ages.indexOf(max), 1);
var max2 = Math.max.apply(null, ages);
return [max2,max];
}
}
ages.length==0
可以用来查看数组中的元素数是否为零
您的代码有一个错误,您说if(ages=[])
试试这个
function oldestAges(ages){
if (ages.length == 0){
return [0,0];
}else{
var max = Math.max.apply(null, ages);
ages.splice(ages.indexOf(max), 1);
var max2 = Math.max.apply(null, ages);
return [max2,max];
}
}
不能使用==
按数组内容比较数组。运算符仅按对象标识进行比较,因此一个数组永远不会与另一个数组进行比较。请使用if(ages.length==0)
来测试空数组。简单的方法是对数组排序,然后返回前两个元素。正如@Barmar所暗示的:问题在这一行:if(ages=[]){
-它将始终返回false
您不能使用=
按内容比较数组。运算符仅按对象标识进行比较,因此一个数组永远不会=
到另一个数组。请使用if(ages.length==0)
测试空数组。简单的方法是对数组排序,然后返回前两个元素。正如@Barmar所暗示的:问题在这一行:如果(ages=[]){
-它将始终返回false