如何正确sorting整数数组

试图从一个我知道只包含整数的数组中获得最高和最低值似乎比我想象的要困难。

var numArray = [140000, 104, 99]; numArray = numArray.sort(); alert(numArray[0] + ", " + numArray[numArray.length - 1]); 

我希望这显示“99,140000”。 相反,它显示“104,99”。 所以看来这种处理方式是把string作为值来处理。

有没有办法让sorting函数实际sorting整数值?

sorting方法默认按字母顺序排列元素。 要进行数值sorting,只需添加一个处理数字sorting的新方法(sortNumber,如下所示)

 function sortNumber(a,b) { return a - b; } var numArray = [140000, 104, 99]; numArray.sort(sortNumber); alert(numArray.join(",")); 

只要build立在所有上述答案上,他们也可以像这样在一行中完成:

 var numArray = [140000, 104, 99]; // ES5 numArray = numArray.sort(function (a, b) { return a - b; }); // ES2015 numArray = numArray.sort((a, b) => a - b); //outputs: 99, 104, 140000 

array.sort在默认情况下进行字典式sorting,对于数字sorting,提供您自己的函数。 这是一个简单的例子:

 function compareNumbers(a, b) { return a - b; } numArray.sort(compareNumbers); 

另外请注意,sorting工作“到位”,没有必要分配。

这个答案相当于一些现有的答案,但ECMAScript 6的箭头函数提供了一个更简洁的语法,它允许我们在不牺牲可读性的情况下定义一个内联sorting函数:

 numArray = numArray.sort((a, b) => a - b); 

目前在大多数浏览器中都支持它。

我同意,但不是使用

 return a - b; 

你应该使用

 return a > b ? 1 : a < b ? -1 : 0; 

在JavaScript中,sort()方法的默认行为是按字母顺序排列数组中的值。

要按数字sorting,您必须定义一个数字sorting函数(这非常简单):

 ... function sortNumber(a, b) { return a - b; } numArray = numArray.sort(sortNumber); 

Array.prototype.sort()是sorting数组的方法,但有一些问题需要注意。

无论数组中的值的types如何,sorting顺序都是默认的词典编排而不是数字。 即使数组是全部数字,所有值将被转换为string并按照字典顺序sorting。

所以我们需要像下面那样自定义sort()和reverse()方法。

推荐url

用于sorting数组内的数字

 numArray.sort(function(a, b) { return a - b; }); 

反转数组内的数字

 numArray.sort(function(a, b) { return b - a; }); 

推荐url

更新! 滚动到smartSort支持添加剂答案的底部,给予更多的乐趣!
sorting任何东西的数组!

我个人最喜欢的这个函数的forms允许升序或降序的参数:

 function intArraySort(c, a) { function d(a, b) { return b - a; } "string" == typeof a && a.toLowerCase(); switch (a) { default: return c.sort(function(a, b) { return a - b; }); case 1: case "d": case "dc": case "desc": return c.sort(d) } }; 

用法简单如下:

 var ara = function getArray() { var a = Math.floor(Math.random()*50)+1, b = []; for (i=0;i<=a;i++) b.push(Math.floor(Math.random()*50)+1); return b; }(); // Ascending intArraySort(ara); console.log(ara); // Descending intArraySort(ara, 1); console.log(ara); // Ascending intArraySort(ara, 'a'); console.log(ara); // Descending intArraySort(ara, 'dc'); console.log(ara); // Ascending intArraySort(ara, 'asc'); console.log(ara); 

的jsfiddle


或代码片段示例在这里!

 function intArraySort(c, a) { function d(a, b) { return b - a } "string" == typeof a && a.toLowerCase(); switch (a) { default: return c.sort(function(a, b) { return a - b }); case 1: case "d": case "dc": case "desc": return c.sort(d) } }; function tableExample() { var d = function() { var a = Math.floor(50 * Math.random()) + 1, b = []; for (i = 0; i <= a; i++) b.push(Math.floor(50 * Math.random()) + 1); return b }, a = function(a) { var b = $("<tr/>"), c = $("<th/>").prependTo(b); $("<td/>", { text: intArraySort(d(), a).join(", ") }).appendTo(b); switch (a) { case 1: case "d": case "dc": case "desc": c.addClass("desc").text("Descending"); break; default: c.addClass("asc").text("Ascending") } return b }; return $("tbody").empty().append(a(), a(1), a(), a(1), a(), a(1), a(), a(1), a(), a(1), a(), a(1)) }; tableExample(); 
 table { border-collapse: collapse; } th, td { border: 1px solid; padding: .25em .5em; vertical-align: top; } .asc { color: red; } .desc { color: blue } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <table><tbody></tbody></table> 

这个问题已经被回答了,最简单的方法是使用sort()方法。 但如果你正在寻找更多的方法来sorting你的数组,而且你也喜欢周期,请检查以下内容

插入sorting

上升:

 var numArray = [140000, 104, 99]; for (var i = 0; i < numArray.length; i++) { var target = numArray[i]; for (var j = i - 1; j >= 0 && (numArray[j] > target); j--) { numArray[j+1] = numArray[j]; } numArray[j+1] = target } console.log(numArray); 

这是我在utils库中的sorting数组函数:

 sortArray: function(array) { array.sort(function(a, b) { return a > b; }); }, # Let's test a string array var arr = ['bbc', 'chrome', 'aux', 'ext', 'dog']; utils.sortArray(arr); console.log(arr); >>> ["aux", "bbc", "chrome", "dog", "ext", remove: function] # Let's test a number array var arr = [55, 22, 1425, 12, 78]; utils.sortArray(arr); console.log(arr); >>> [12, 22, 55, 78, 1425, remove: function] 

试试这个代码:

HTML:

 <div id="demo"></div> 

JavaScript代码:

 <script> (function(){ var points = [40, 100, 1, 5, 25, 10]; document.getElementById("demo").innerHTML = points; points.sort(function(a, b){return ab}); document.getElementById("demo").innerHTML = points; })(); </script>