Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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_Arrays_Max - Fatal编程技术网

使用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