Javascript 如何对字母数字数组os对象进行排序

Javascript 如何对字母数字数组os对象进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我正在尝试按所示对包含字母数字值的对象数组进行排序 [ { bayid="A1", status=0}, { bayid="A7", status=0}, { bayid="A6", status=0}, { bayid="A5", status=0} ] 我使用的是.sort方法,如下所示 var sortedArray = modifiedStatusArray.sort(function(a, b) { return +b.bayid >

我正在尝试按所示对包含字母数字值的对象数组进行排序

[
{ bayid="A1",  status=0}, 
{ bayid="A7",  status=0}, 
{ bayid="A6",  status=0}, 
{ bayid="A5",  status=0}
]
我使用的是.sort方法,如下所示

var sortedArray = modifiedStatusArray.sort(function(a, b) {
                return +b.bayid > +a.bayid;
            });
[

{ bayid="A7",  status=0}, 
{ bayid="A6",  status=0}, 
{ bayid="A5",  status=0},
{ bayid="A1",  status=0}
]
但不确定如何排序并获得如下所示的输出

var sortedArray = modifiedStatusArray.sort(function(a, b) {
                return +b.bayid > +a.bayid;
            });
[

{ bayid="A7",  status=0}, 
{ bayid="A6",  status=0}, 
{ bayid="A5",  status=0},
{ bayid="A1",  status=0}
]

请帮助

我注意到您的对象有问题,变量的定义应如下所示:

var data = [
    { bayid: "A1",  status: 0}, 
    { bayid: "A7",  status: 0}, 
    { bayid: "A6",  status: 0},
    { bayid: "A5",  status: 0}
];
您可以使用排序功能:

var sorted = data.sort(function(a, b){
    if( a.bayid === b.bayid ){
      return 0;
    } else if ( a.bayid < b.bayid ) {
      return 1;
    } else {
      return -1;
    }
});
console.log( sorted );
var sorted=data.sort(函数(a,b){
if(a.bayid==b.bayid){
返回0;
}else if(a.bayid
sort
函数将函数作为参数,该函数作为比较函数(可选参数),根据函数的返回值对数组的值进行排序

根据规范:

数组元素根据compare函数的返回值进行排序

如果返回值为:

  • 小于0,将a排序为比b更低的索引
  • 0(等于零),使a和b彼此保持不变
  • 大于0时,将b排序为低于a的索引
更多信息来自


此外,如果您在创建新问题之前在网站上搜索,它可能会有所帮助。

我注意到您的对象有问题,变量的定义应如下所示:

var data = [
    { bayid: "A1",  status: 0}, 
    { bayid: "A7",  status: 0}, 
    { bayid: "A6",  status: 0},
    { bayid: "A5",  status: 0}
];
您可以使用排序功能:

var sorted = data.sort(function(a, b){
    if( a.bayid === b.bayid ){
      return 0;
    } else if ( a.bayid < b.bayid ) {
      return 1;
    } else {
      return -1;
    }
});
console.log( sorted );
var sorted=data.sort(函数(a,b){
if(a.bayid==b.bayid){
返回0;
}else if(a.bayid
sort
函数将函数作为参数,该函数作为比较函数(可选参数),根据函数的返回值对数组的值进行排序

根据规范:

数组元素根据compare函数的返回值进行排序

如果返回值为:

  • 小于0,将a排序为比b更低的索引
  • 0(等于零),使a和b彼此保持不变
  • 大于0时,将b排序为低于a的索引
更多信息来自


如果您在创建新问题之前在网站上搜索,也可能会有帮助。

您的排序函数应返回
1
-1
0

var sortedArray = modifiedStatusArray.sort(function(a, b) {
    return a.bayid < b.bayid ? 1 : a.bayid > b.bayid ? -1 : 0;
});
var sortedArray=modifiedStatusArray.sort(函数(a,b){
返回a.bayidb.bayid?-1:0;
});

排序函数应返回
1
-1
0

var sortedArray = modifiedStatusArray.sort(function(a, b) {
    return a.bayid < b.bayid ? 1 : a.bayid > b.bayid ? -1 : 0;
});
var sortedArray=modifiedStatusArray.sort(函数(a,b){
返回a.bayidb.bayid?-1:0;
});

这种排序方法对任何数据都不起作用,更不用说字母数字数据了。排序回调不应返回布尔值。请尝试仅使用
.sort(函数(A,b){return b.bayid.match(/\d+/)-A.bayid.match(/\d+/)})
该排序方法对任何数据都不起作用,更不用说字母数字数据了。排序回调不应该返回布尔值。请尝试仅使用
.sort(函数(A,b){return b.bayid.match(/\d+/)-A.bayid.match(/\d+/)})
根据W3,Array.sort需要一个整数返回值(-1,0,1),而不是布尔值。您的顺序是
[{bayid:'A1',status:0},{bayid:'A5 status:0},{bayid:'A6,status:0},{bayid:'A7',status:0}]
根据W3,Array.sort需要一个整数返回值(-1,0,1),而不是布尔值。您的顺序是
[{bayid:'A1',status:0},{bayid:'A5',status:0},{bayid:'A6',status:0}]
我认为排序可能在这里向后。如果aa应该返回
1
我想这里的排序可能是向后的。如果aa应该返回
1