javascript array.sort 不适用于整数

标签 javascript jquery

我在 javascript 数组排序和整数方面遇到问题。我定义了这些函数:

function sortA(a,b){ 
  return a - b;
}
function sortD(a,b){ 
  return b - a;
}

然后在 jquery $.each 中,我在数组中放入了一些内容:

$('.'+sort_column).each(function(index, value) {

    var current_num = $.trim($(this).text())

    current_num = parseInt(current_num, 10); //convert to integer for numeric sorting.

    valuesArr.push(current_num);  

    console.log(typeof index); //just checking...this shows number in the console
});

var sort_asc = valuesArr.sort(sortA);
var sort_desc = valuesArr.sort(sortD);
console.log(sort_asc);
console.log(sort_desc);

但在控制台中,我以相同的顺序获取数组。

//console
[1214500, 1214499, 1214497, 1214481, 1214432, 1214421, 1214419, 1214418, 1214369, 1214045, 1205691]
[1214500, 1214499, 1214497, 1214481, 1214432, 1214421, 1214419, 1214418, 1214369, 1214045, 1205691]

奇怪的是,如果我在末尾附加一个字符串,排序就会起作用

console.log( valuesArr.sort(sortD)  + "asdf");
console.log( valuesArr.sort(sortA)  + "asdf");

//console
[1214500,1214499,1214497,1214481,1214432,1214421,1214419,1214418,1214369,1214045,1205691asdf] 
[1205691,1214045,1214369,1214418,1214419,1214421,1214432,1214481,1214497,1214499,1214500asdf]

我不知道为什么我要尝试这样做,但就是这样。这是我第一次使用这种方法,所以我可能错过了一些非常基本的东西。非常感谢您的帮助!

最佳答案

您正在对同一数组的实例进行排序,这就是顺序相同的原因。基本上sort更改数组本身的内容。

所以它们都将按降序排列(这是您最后一次进行的排序)。如果你想保持原始实例不变,你应该创建新的数组:

var sort_asc = valuesArr.slice(0).sort(sortA);
var sort_desc = valuesArr.slice(0).sort(sortD);

console.log(valuesArr);
console.log(sort_asc);
console.log(sort_desc);

另请参阅slice .

关于javascript array.sort 不适用于整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10872637/

相关文章:

php - 在动态填充 div 后让 js 触发

JQuery:采取特定操作时防止触发其他事件

javascript - Firefox 过早调用 setTimeout 函数(或 Date.getTime() 已关闭?)

php - 重定向到标题而不在php中打印js警报

javascript - 如何将 arrayUnion 与 AngularFirestore 一起使用?

Javascript 简单对象默认覆盖

javascript - 如何将自定义 jQuery 插件应用于多个元素?

javascript - 当我放入一个无法自行运行的新函数后,整个 JS 文件无法运行

javascript - 在分析 JavaScript 时如何忽略像 jQuery 这样的库?

javascript - RegEx - 匹配事件的 LIFO 缓冲区