使用split('')和reverse()查找数组中的最小数字;

时间:2015-04-11 19:31:41

标签: javascript arrays

我试图找到数组的最小值,并尝试通过对数组进行排序,然后反转数组,然后调用数组的第一个索引来实现。

不幸的是,我一直在尝试,我一直得到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))

5 个答案:

答案 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))

JSFIDDLE

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