如何排序包含数字的数组?

Joo*_*ler 3 javascript arrays sorting

我正在尝试对数组进行排序.

EX-

let arr = [{label: "Name 5"}, {label: "Name 3"},{label: "Name 12"}, {label: "Name 10"}, {label: "First Name 5"}, {label: "Apple"}, {label: "Orange"}, {label: "water"}];


let sortedArray = arr.sort(function(a, b){
 return a.label.localeCompare(b.label);
});

console.log(sortedArray);
Run Code Online (Sandbox Code Playgroud)

当我尝试对它进行排序时,"名称10"首先出现,但"名称3"应该出现.

我也试过这个 -

let sortedArray = arr.sort(function(a, b){
  var nameA=a.label.toLowerCase(), nameB=b.label.toLowerCase();
    if (nameA < nameB){
      return -1;
    } //sort string ascending
    if (nameA > nameB){
      return 1;
    }
   return 0; //no sorting
});
Run Code Online (Sandbox Code Playgroud)

还有这个 -

Array.prototype.reverse()
String.prototype.localeCompare()
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort

但仍然没有运气.任何人都可以指出这里有什么不对吗?

Nin*_*olz 8

为什么不起作用?

您正在排序字符串,默认排序是字典顺序.您正在寻找的是按自然顺序排序.

提出的解决方案

您可以使用String#localeCompare自然排序选项.

let arr = [{label: "Name 5"}, {label: "Name 3"},{label: "Name 12"}, {label: "Name 10"}, {label: "First Name 5"}, {label: "Apple"}, {label: "Orange"}, {label: "water"}];

arr.sort(function(a, b) {
   return a.label.localeCompare(b.label, undefined, { numeric: true, sensitivity: 'base' });
});

console.log(arr);
Run Code Online (Sandbox Code Playgroud)