使用JavaScript在数组中查找最小值和最大值

4

我正在尝试编写一个算法,用于在数组中找到最小值和最大值,以及第二小和第二大的值。

我尝试使用以下代码:

numbers = [2, 4, 9, 2, 0, 16, 24]

var largest = numbers[0];
var smallest = numbers[0];

for (var i = 1; i < numbers.length; i++) {

  if (numbers[i] > largest) {
    largest = numbers[i];
  } else if (numbers[i] < smallest) {
    smallest = numbers[i];
  }

  console.log(largest);
  console.log(smallest);
}

这似乎没有起作用,只是打印出了数组...我做错了什么?

4
你的逻辑对于寻找最大和最小数是正确的 - 你只需要将 console.log 语句移到循环外面即可。 - Rick Hitchcock
哦,哇,我怎么没看到那个……真尴尬。有没有关于如何获取第二大和第二小的建议? - MadCatm2
"有没有关于如何获取第二大和第二小的建议?" --- 创建一个函数,用于维护一个包含N个元素的排序数组。然后将其与您的“numbers”数组一起使用。 - zerkms
@MadCatm2 使用相同的算法,只需使用一个包含相同数据的新数组,并从中删除最大和最小值。或者对数组进行排序并获取索引1n-2(假设n-1是最后一个元素,0是第一个元素)。 - Spencer Wieczorek
哦,但那只会给我一个从最小到最大排序的数字数组,对吧?我只需要返回一个第二小的值... - MadCatm2
12个回答

10
最简单的方法是对数组排序,然后返回前两个和后两个元素。
使用 slice() 可以避免对数组本身进行排序。

var numbers = [2, 4, 9, 2, 0, 16, 24];

var sorted = numbers.slice().sort(function(a, b) {
  return a - b;
});

var smallest = sorted[0],                      
    secondSmallest = sorted[1],                
    secondLargest = sorted[sorted.length - 2], 
    largest  = sorted[sorted.length - 1];

console.log('Smallest: ' + smallest);
console.log('Second Smallest: ' + secondSmallest);
console.log('Second Largest: ' + secondLargest);
console.log('Largest: ' + largest);


3
你可以使用展开运算符将每个数组元素作为参数传递给Math.min()Math.max()
使用此方法,您可以找到数组中最小和最大的数字:

const numbers = [2, 4, 9, 2, 0, 16, 24];

const smallest_number = Math.min(...numbers);
const largest_number = Math.max(...numbers);

console.log('Smallest Value:', smallest_number); // Smallest Value: 0
console.log('Largest Value:', largest_number);   // Largest Value: 24


3

将console.log语句移到for循环之外。


2
const numbers = [2, 4, 9, 2, 0, 16, 24];

//we can use reduce to find the largest and smallest number

const largest = numbers.reduce((previousValue, currentValue) =>
            previousValue > currentValue ? previousValue : currentValue
        );

const smallest = numbers.reduce((previousValue, currentValue) =>
            previousValue < currentValue ? previousValue : currentValue
        );

2
请在您的回答中添加一些描述。 - SayAz

1

如Roatin Marth在这篇文章中所说(由Llama先生编辑):https://dev59.com/WXI-5IYBdhLWcg3wy70d#6102340

你可以像下面这样使用math.min和math.max来处理数组

Array.prototype.max = function() {
  return Math.max.apply(null, this);
};

Array.prototype.min = function() {
  return Math.min.apply(null, this);
};

如果这会引起任何问题,您也可以使用:

var min = Math.min.apply(null, largest),
max = Math.max.apply(null, largest);

var min = Math.min.apply(null, numbers),
max = Math.max.apply(null, numbers);

这不会帮助找到第二小和第二大的数字,但我发现这是寻找最大和最小数字的更简单的解决方案。

1
numbers = [2, 4, 9, 2, 0, 16, 24]
var largest = numbers[0];
var smallest = numbers[0];
for (var i = 0; i < numbers.length; i++){
    var temp = numbers[i];
    if (temp > largest)
    {
        largest = numbers[i];
    }
    if (temp < smallest)
    {
        smallest = numbers[i];
    }
}
console.log(largest);
console.log(smallest);

0

如何在数组中获取第一大和第二大的数我希望这对每个人都有帮助,谢谢

// first method

const getLargestNumber = (nums) => {
    let largest = [0];
    for (let i = 0; i <= nums.length; i++) {
      if (largest <= nums[i]) {
        largest = nums[i]
      }
    }
    return largest;
}

const array = [0, 2, 3, 6, 6, 5]

console.log("first method", getLargestNumber(array))

// second method

const maxNumber = Math.max(...array);

console.log("Second Method", maxNumber)

// third method

const getMaxNumber = array.sort((a, b) => b - a)[0]

console.log("Third Method", getMaxNumber)

const getSecondLargest = (nums) => {
    let largest = Math.max(...nums), newArr = [];
    for (let i = 0; i <= nums.length; i++) {
      if ((nums[i] !== undefined) && !(largest <= nums[i])) {
        newArr.push(nums[i]);
      }
    }
    return Math.max(...newArr);
}

const array = [0, 2, 3, 6, 6, 5]

console.log(getSecondLargest(array))


0

常量 x = [1,2,3,4];

常量 y = Math.min(...x);

常量 z = Math.max(...x)


0
let arr = [1,2,3,4,5]


const bigandsmallNum = function(){
    const smallNum = Math.min(...arr)
    const largeNum = Math.max(...arr)
    console.log(smallNum,largeNum)

 }
console.log(bigandsmallNum())

0
你可以使用reduce返回一个具有最大值和最小值的对象:
const array = [22, 3, 56 , 7, 14, 100, 2, 44]

const findLargestAndSmallest = (arr) => arr.reduce((acc, cur) => {
  acc = acc.largest > cur ? 
   {...acc, largest: acc.largest} : 
   {...acc, largest: cur}
  acc = acc.smallest < cur ? 
   {...acc, smallest: acc.smallest} :
   {...acc, smallest: cur}
  return acc
}, {})

console.log(findLargestAndSmallest(array)) // { largest: 100, smallest: 2 }

// or destruct it: 

const {largest, smallest} = findLargestAndSmallest(array)
console.log(largest) // 100
console.log(smallest) // 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接