javascript js数组自定义排序 - 如何正确排序整数数组



js数组排序 js对数组对象排序 (12)

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

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

numArray.sort(compareNumbers);

另外请注意,排序工作“就地”,不需要分配。

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

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

我希望这显示“99,140000”。 相反,它显示“104,99”。 所以它似乎是把这些值作为字符串来处理。

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


Array.prototype.sort()是排序数组的方法,但有几个问题需要注意。

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

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

推荐的网址

用于排序数组内的数字

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

用于反转数组内的数字

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

推荐的网址


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

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

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


尝试下面的代码

var a = [5, 17, 29, 48, 64, 21];
function sortA(arr) {
return arr.sort(function(a, b) {
return a - b;
})
;} 
alert(sortA(a));

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

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

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

numArray = numArray.sort(sortNumber);

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

插入排序

上升:

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

降:

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

选择排序:

上升:

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

降:

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

玩的开心


对于一个正常的元素值数组:

function sortArrayOfElements(arrayToSort) {
    function compareElements(a, b) {
        if (a < b)
            return -1;
        if (a > b)
            return 1;
        return 0;
    }

    return arrayToSort.sort(compareElements);
}

e.g. 1:
var array1 = [1,2,545,676,64,2,24]
**output : [1, 2, 2, 24, 64, 545, 676]**

var array2 = ["v","a",545,676,64,2,"24"]
**output: ["a", "v", 2, "24", 64, 545, 676]**

对于一组对象:

function sortArrayOfObjects(arrayToSort, key) {
    function compareObjects(a, b) {
        if (a[key] < b[key])
            return -1;
        if (a[key] > b[key])
            return 1;
        return 0;
    }

    return arrayToSort.sort(compareObjects);
}

e.g. 1: var array1= [{"name": "User4", "value": 4},{"name": "User3", "value": 3},{"name": "User2", "value": 2}]

**output : [{"name": "User2", "value": 2},{"name": "User3", "value": 3},{"name": "User4", "value": 4}]**

我同意aks,但不是使用

return a - b;

你应该使用

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

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

function sortNumber(a,b) {
    return a - b;
}

var numArray = [140000, 104, 99];
numArray.sort(sortNumber);
alert(numArray.join(","));

编辑:使用ES6箭头功能:

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

试试这个代码:

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 a-b});
        document.getElementById("demo").innerHTML = points;
    })();
</script>

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

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

如果您使用的是ES6,则可以使用spread运算符来执行此操作。

var arr = [
    "apple",
    "banana",
    "cherry"
];

var arr2 = [
    "dragonfruit",
    "elderberry",
    "fig"
];

arr.push(...arr2);




javascript arrays sorting numbers