查找数组中最小和最大的值(JS)

时间:2016-07-07 22:19:44

标签: javascript arrays

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

我尝试了以下内容:

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);

}

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

9 个答案:

答案 0 :(得分:3)

最简单的方法是对数组进行排序,然后返回前两个元素和最后两个元素。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您可以使用spread operator将每个数组元素作为参数传递给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 :(得分:1)

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
        );

答案 4 :(得分:0)

正如Roatin Marth(Llama先生编辑)在这篇文章中所说:https://stackoverflow.com/a/6102340/6074388

您可以使数组使用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);

它不仅有助于找到第二个最小和第二大数字,但我发现这是找到最大和最小数字的更简单的解决方案。

答案 5 :(得分:0)

var numbers = [2, 4, 9, 2, 0, 16, 24];
var largest = -Infinity;
var smallest = Infinity;

for (var i = 0; i < numbers.length; i++) {
    if (numbers[i] > largest) {
        largest = numbers[i];
    }
}

for (var i = 0; i < numbers.length; i++) {
    if (numbers[i] < smallest) {
        smallest = numbers[i];
    }
}

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

答案 6 :(得分:0)

您可以为此使用reduce函数!

var numbers = [45, 4, 9, 16, 25, 100, 43];

var max = numbers.reduce((total, value, index, array) => {
    if(index === 0) return array[0];
    return total > value ? total : value;
});
console.log(max);

var min = numbers.reduce((total, value, index, array) => {
    if(index === 0) return array[0];
    return total < value ? total : value;
});
console.log(min);

您可以了解reduce函数如何工作here。当您必须从数组的所有值中得出结果时,它真的很有用。

我还使用ternary operator来减少代码。

答案 7 :(得分: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())

答案 8 :(得分:-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);