最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

get the first and second highest values of an array using javascript - Stack Overflow

programmeradmin2浏览0评论

I am trying to perform the following code:

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];
  }
}

However, when testing [] as ages, the expected was '[0, 0]', instead got: '[-Infinity, -Infinity]'

Also, is there a much easier way to acplish the same task? I ask because using R I could get the same result in much less number of lines. I am noob in javascript still.

I am trying to perform the following code:

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];
  }
}

However, when testing [] as ages, the expected was '[0, 0]', instead got: '[-Infinity, -Infinity]'

Also, is there a much easier way to acplish the same task? I ask because using R I could get the same result in much less number of lines. I am noob in javascript still.

Share Improve this question edited Oct 1, 2018 at 20:32 Pointy 414k62 gold badges595 silver badges629 bronze badges asked Oct 1, 2018 at 20:31 motipaimotipai 3283 silver badges12 bronze badges 4
  • 1 You can't use == to pare arrays by their contents. The operator pares only by object identity, so one array will never ever be == to another array. – Pointy Commented Oct 1, 2018 at 20:32
  • 2 Use if(ages.length == 0) to test for an empty array. – Barmar Commented Oct 1, 2018 at 20:33
  • The simple way is to sort the array and then return the first two elements. – Barmar Commented Oct 1, 2018 at 20:33
  • As @Barmar implied: the problem is in this line: if (ages == []){ - it will always return false – Nir Alfasi Commented Oct 1, 2018 at 20:50
Add a ment  | 

3 Answers 3

Reset to default 4

A simple (not sure about the most optimal) way to achieve this:

const input = [5, 150, 2, 8, 58, 4];

const result = input.sort((x, y) => y - x).slice(0, 2);

console.log(result);

You can sort your array in descending order so that the first two elements contain the highest values.

ages.sort((a, b) => b - a);

Now ages[0] and ages[1] contain the two biggest numbers.

ages.length == 0 is what you can use to see if the number of the elements in the array is zero.

Your code has an error where you say if (ages == []).

Try this,

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];
      }
    }
发布评论

评论列表(0)

  1. 暂无评论