我正在尝试编写一个算法,该算法可以找到数组中最小和最大的值,第二大和第二小的值。
我尝试了以下内容:
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);
}
这似乎不起作用,只打印出数组......我做错了什么?
答案 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);