我试图找到数组的最小值,并尝试通过对数组进行排序,然后反转数组,然后调用数组的第一个索引来实现。
不幸的是,我一直在尝试,我一直得到9.(不知道为什么)任何人都可以快速看看我一直在做什么并保释我在这里? (我使用js)
var minny = [4, 3, 5, 2, 6, 3, 4, 5, 2, 3, 4, 6, 7, 8, 9, 9, 1, 11, 25];
var smallest = function (minny){
minny = minny.sort('');
var sorted = minny + " ";
sorted = minny.reverse('').join('');
return sorted[0];
}
console.log(smallest(minny))
答案 0 :(得分:3)
默认情况下,sort方法按字母顺序排序元素(11位于9之前),因此您需要添加一个比较函数作为参数。
var smallest = function (minny) {
minny = minny.sort(function(a, b) { return a - b; });
return minny[0];
}
console.log(smallest(minny))
答案 1 :(得分:2)
根据您的代码,您可以执行
return minny.sort()[0];
因此,您的完整代码示例变为
var minny = [4, 3, 5, 2, 6, 3, 4, 5, 2, 3, 4, 6, 7, 8, 9, 9, 1, 11, 25];
var smallest = function (minny){
return minny.sort()[0];
}
console.log(smallest(minny))
答案 2 :(得分:0)
sort()
按字母顺序按字符串表示排序,因此在您的情况下会导致1, 11, 2, 2, 25, ...
。你必须提供一个比较函数来进行正确的整数排序,尽管在你的具体情况下它并没有真正有所作为。
var smallest = function (minny){
minny = minny.sort(function(a, b){return a-b});
return minny[0];
}
请参阅jsfiddle
答案 3 :(得分:0)
你正在调用使用默认自然排序的minny.sort(''),因此11和25因为1和2而最终接近开头。
您需要做的是使用比较数字的函数调用sort,例如:
minny.sort(function(a,b) { return b-a; });
这将按照你想要的方式对minny进行排序。
之后不需要再调用reverse和join,只需返回第一项。 “return sorted [0]”很好但如果没有项目则会失败,所以你可能只想调用“return sorted.shift()”。这也将返回第一个项目,但如果数组为空则不会失败。
PS。你对minny.reverse的调用也有一个空字符串作为参数。这不是必需的,反向不需要参数。
答案 4 :(得分:0)
使用sort是相当短的代码,如果使用minny.sort(function(a,b){return a-b})[0]
,它将返回正确的数字。
如果您有一个较大的无序数组,那么您正在多次运行比较和,您正在对数组进行排序,这通常不是您想要对数组执行的操作。
最好只是迭代成员并将每一个只比较一次到目前为止的最低要求。
var minny= [4, 3, 5, 2, 6, 3, 4, 5, 2, 3, 4, 6, 7, 8, 9, 9, 1, 11, 25];
var smallest= function(minny){
var min= Infinity;
minny.forEach(function(next){
if(next<min) min= next;
});
return min;
}
或者使用Math.min,如果这是代码高尔夫:
Math.min.apply(Array,minny);