Javascript 如何先用字母表,然后用数字对对象数组进行排序

Javascript 如何先用字母表,然后用数字对对象数组进行排序,javascript,reactjs,Javascript,Reactjs,代码: 电流输出: keyword.sort((a, b) => a.Acr.localeCompare(b.Acr)); 预期产出: [{ "Id": 947, "Acr": 502, "Definition": "ADefBulk6", "index": 0 }, { "Id":

代码:

电流输出:

keyword.sort((a, b) => a.Acr.localeCompare(b.Acr));
预期产出:

[{
        "Id": 947,
        "Acr": 502,
        "Definition": "ADefBulk6",
        "index": 0
    }, {
        "Id": 762,
        "Acr": "AO",
        "Definition": "Anti",
        "ID": 762,
        "index": 1
    }, {
        "Id": 72,
        "Acr": "AW",
        "Definition": "Corporate",
        "ID": 762,
        "index": 1
    }
]

如果
Acr
-值都是字符串,则可以在排序回调中进行检查,如果是,则返回字符串比较的结果。如果只有一个值是字符串,则为其赋予优先级,如果它们都不是字符串(我假设您只有数字和字符串作为其值),则返回值的(有符号)差。像这样的东西应该可以做到:

[{
        "Id": 947,
        "Acr": "AO",
        "Definition": "ADefBulk6",
        "index": 0
    }, {
        "Id": 762,
        "Acr": "AW",
        "Definition": "Anti",
        "ID": 762,
        "index": 1
    }, {
        "Id": 72,
        "Acr": 502,
        "Definition": "Corporate",
        "ID": 762,
        "index": 1
    }
]
对于带有数字字符串的值,可以执行以下操作:

const arr=[
{“Id”:949,“Acr”:“900”,“定义”:“ADefBulk6”,“索引”:0},
{“Id”:947,“Acr”:“502”,“定义”:“ADefBulk6”,“索引”:0},
{“Id”:762,“Acr”:“AW”,“定义”:“Anti”,“Id”:762,“index”:1},
{“Id”:72,“Acr”:“AO”,“定义”:“公司”,“Id”:762,“索引”:1},
{“Id”:73,“Acr”:“401(c)(d)”,“定义”:“公司”,“Id”:762,“索引”:1},
{“Id”:76,“Acr”:“AA”,“定义”:“公司”,“Id”:762,“索引”:1}];
arr.sort((a,b)=>{
常数nrA=Number.parseInt(a.Acr);
const nrB=Number.parseInt(b.Acr);
if(伊斯南(nrA)和伊斯南(nrB)){
返回a.Acr.localeCompare(b.Acr);
}否则,如果(伊斯南(nrA)){
返回-1;
}否则,如果(伊斯南(nrB)){
返回1;
}否则{
返回数学符号(nrA-nrB);
}
});

控制台日志(arr)
如果两个
Acr
-值都是字符串,则可以在排序回调中进行检查,如果是,则返回字符串比较的结果。如果只有一个值是字符串,则为其赋予优先级,如果它们都不是字符串(我假设您只有数字和字符串作为其值),则返回值的(有符号)差。像这样的东西应该可以做到:

[{
        "Id": 947,
        "Acr": "AO",
        "Definition": "ADefBulk6",
        "index": 0
    }, {
        "Id": 762,
        "Acr": "AW",
        "Definition": "Anti",
        "ID": 762,
        "index": 1
    }, {
        "Id": 72,
        "Acr": 502,
        "Definition": "Corporate",
        "ID": 762,
        "index": 1
    }
]
对于带有数字字符串的值,可以执行以下操作:

const arr=[
{“Id”:949,“Acr”:“900”,“定义”:“ADefBulk6”,“索引”:0},
{“Id”:947,“Acr”:“502”,“定义”:“ADefBulk6”,“索引”:0},
{“Id”:762,“Acr”:“AW”,“定义”:“Anti”,“Id”:762,“index”:1},
{“Id”:72,“Acr”:“AO”,“定义”:“公司”,“Id”:762,“索引”:1},
{“Id”:73,“Acr”:“401(c)(d)”,“定义”:“公司”,“Id”:762,“索引”:1},
{“Id”:76,“Acr”:“AA”,“定义”:“公司”,“Id”:762,“索引”:1}];
arr.sort((a,b)=>{
常数nrA=Number.parseInt(a.Acr);
const nrB=Number.parseInt(b.Acr);
if(伊斯南(nrA)和伊斯南(nrB)){
返回a.Acr.localeCompare(b.Acr);
}否则,如果(伊斯南(nrA)){
返回-1;
}否则,如果(伊斯南(nrB)){
返回1;
}否则{
返回数学符号(nrA-nrB);
}
});

控制台日志(arr)一种方法是分别对它们进行排序,然后将它们添加到一起

sortx=[{“Id”:947,“Acr”:502,“定义”:“ADefBulk6”,“index”:0},{“Id”:72,“Acr”:“AW”,“定义”:“Corporate”,“Id”:762,“index”:1},{“Id”:762,“Acr”:“AO”,“定义”:“Anti”,“Id”:762,“index”:1},{“Id”:100,“Acr”:100,“定义”:“Anti”,“Id”:762,“index”:1}]
var sortalph=sortx.filter(o=>typeof(o.Acr)==“string”).sort((a,b)=>a.Acr.localeCompare(b.Acr))
var sortnum=sortx.filter(o=>typeof(o.Acr)==“number”).sort((a,b)=>a.Acr-b.Acr)

log([…sortalph,…sortnum])
一种方法是分别对它们进行排序,然后将它们添加到一起

sortx=[{“Id”:947,“Acr”:502,“定义”:“ADefBulk6”,“index”:0},{“Id”:72,“Acr”:“AW”,“定义”:“Corporate”,“Id”:762,“index”:1},{“Id”:762,“Acr”:“AO”,“定义”:“Anti”,“Id”:762,“index”:1},{“Id”:100,“Acr”:100,“定义”:“Anti”,“Id”:762,“index”:1}]
var sortalph=sortx.filter(o=>typeof(o.Acr)==“string”).sort((a,b)=>a.Acr.localeCompare(b.Acr))
var sortnum=sortx.filter(o=>typeof(o.Acr)==“number”).sort((a,b)=>a.Acr-b.Acr)

log([…sortalph,…sortnum])
检查两个字符串的类型,如果都是字符串,则对它们进行排序。如果两个数字都排序。如果不同,请先移动字符串

var-arr=[{
“Acr”:502,
}, {
“Acr”:“AO”,
}, {
“Acr”:“AW”,
}, {
“Acr”:402,
}
];
arr.sort((a,b)=>{
var tA=a.Acr的类型;
var tB=b.Acr的类型;
if(tA==tB&&tA==string){
返回a.Acr.localeCompare(b.Acr);
}else if(tA==tB&&tA==number){
返回a.Acr-b.Acr;
}否则{
返回tA==“字符串”?-1:1;
}
});

控制台日志(arr)检查类型如果两个字符串都是,请对它们进行排序。如果两个数字都排序。如果不同,请先移动字符串

var-arr=[{
“Acr”:502,
}, {
“Acr”:“AO”,
}, {
“Acr”:“AW”,
}, {
“Acr”:402,
}
];
arr.sort((a,b)=>{
var tA=a.Acr的类型;
var tB=b.Acr的类型;
if(tA==tB&&tA==string){
返回a.Acr.localeCompare(b.Acr);
}else if(tA==tB&&tA==number){
返回a.Acr-b.Acr;
}否则{
返回tA==“字符串”?-1:1;
}
});

控制台日志(arr)请看:这是否回答了您的问题?请看这个:这回答了你的问题吗?谢谢你的回复。如果我的数组是这样的呢?var arr=[{“Acr”:“502”,},{“Acr”:“AO”,},{“Acr”:“AW”,},{“Acr”:“402”,},{“Acr”:“401(c)(d)”];我只希望字母表字符串值之后出现以数字开头的Acr字符串值。您能帮忙吗?@TiaSengupta:检查我的更新答案,查看带有数字字符串的
Acr
-值。我认为使用此解决方案
“401(c)(d)”
将不会在alpha字符后面排序…什么是合适的方法?@eol我在OPs值中看不到这一点。似乎是数字或字母。如果是混合的,使用一个重复链接(有我的解决方案)将有效。感谢您的回复。如果我的数组是这样的,该怎么办?var arr=[{“Acr”:“502”,},{“Acr”:“AO”,},{“Acr”:“AW”,},{“A”