使用Javascript.sort函数对包含数字的字符串进行排序

使用Javascript.sort函数对包含数字的字符串进行排序,javascript,Javascript,我有以下包含字符串的对象数组: [{“代码名”:“SNOMED”,“代码系统id”:“1234”},{“代码名”:“2BPRECISE”,“代码系统id”:“4567”}, {“代码名称”:“UMLS”,“代码系统id”:“7894”}] 字符串需要按字母顺序排序,使用了以下函数: .sort((a,b)=>a.code\u名称-b.code\u名称) 期望: [{“code_name”:“SNOMED”,“code_system_id”:“1234”},{“code_name”:“UMLS

我有以下包含字符串的对象数组:

[{“代码名”:“SNOMED”,“代码系统id”:“1234”},{“代码名”:“2BPRECISE”,“代码系统id”:“4567”},
{“代码名称”:“UMLS”,“代码系统id”:“7894”}]
字符串需要按字母顺序排序,使用了以下函数:

.sort((a,b)=>a.code\u名称-b.code\u名称)
期望:

[{“code_name”:“SNOMED”,“code_system_id”:“1234”},{“code_name”:“UMLS”,“code_system_id”:“7894”},
{“代码名称”:“2BPRECISE”,“代码系统id”:“4567”}]
或
[{“代码名”:“2BPRECISE”,“代码系统id”:“4567”},{“代码名”:“SNOMED”,“代码系统id”:“1234”},{“代码名”:“UMLS”,“代码系统id”:“7894”}]
实际结果:

[{“代码名”:“SNOMED”,“代码系统id”:“1234”},{“代码名”:“2BPRECISE”,“代码系统id”:“4567”},
{“代码名称”:“UMLS”,“代码系统id”:“7894”}]
我的理解是,
.sort
函数基于utf-16进行排序,但不清楚如何获得预期结果。
如何获得预期结果(任意一个)?

sort
接受一对有序元素的比较器函数。例如:

对于元素e1、e2:

if e1 > e2 compartor = 1 
if e1 < e2 compartor = -1 
if e1 = e2 compartor = 0 
如果e1>e2比较器=1
如果e1
就你的情况而言:

const比较器=(e1,e2)=>{
如果(e1.code\u name>e2.code\u name)返回1
如果(e1.代码\名称2.代码\名称)返回0
}
向前测试:

let input=[{“code_name”:“SNOMED”,“code_system_id”:“1234”},{“code_name”:“2BPRECISE”,“code_system_id”:“4567”},
{“代码名称”:“UMLS”,“代码系统id”:“7894”}]
常量比较器=(e1,e2)=>{
如果(e1.code\u name>e2.code\u name)返回1
如果(e1.代码\名称2.代码\名称)返回0
}

console.log(input.sort(comparator))
sort
接受一对有序元素的comparator函数。例如:

对于元素e1、e2:

if e1 > e2 compartor = 1 
if e1 < e2 compartor = -1 
if e1 = e2 compartor = 0 
如果e1>e2比较器=1
如果e1
就你的情况而言:

const比较器=(e1,e2)=>{
如果(e1.code\u name>e2.code\u name)返回1
如果(e1.代码\名称2.代码\名称)返回0
}
向前测试:

let input=[{“code_name”:“SNOMED”,“code_system_id”:“1234”},{“code_name”:“2BPRECISE”,“code_system_id”:“4567”},
{“代码名称”:“UMLS”,“代码系统id”:“7894”}]
常量比较器=(e1,e2)=>{
如果(e1.code\u name>e2.code\u name)返回1
如果(e1.代码\名称2.代码\名称)返回0
}
console.log(input.sort(comparator))
您可以尝试以下方法:

const data=[{“code_name”:“SNOMED”,“code_system_id”:“1234”},{“code_name”:“2BPRECISE”,“code_system_id”:“4567”},
{“代码名称”:“UMLS”,“代码系统id”:“7894”},
{“code_name”:“SNOMED”,“code_system_id”:“1234”}];
常量比较=(dirn)=>{
如果(dirn=='asc'){
返回(a,b)=>{
如果(a.code\u name==b.code\u name)返回0;
返回a.code\u name>b.code\u name?1:-1;
}
}else if(dirn=='desc'){
返回(a,b)=>{
如果(a.code\u name==b.code\u name)返回0;
返回a.code\u name>b.code\u name?-1:1;
}
}
}
console.log('asc',data.sort(compare('asc'));
console.log('desc',data.sort(compare('desc'))
。作为控制台包装{最小高度:100%!重要;顶部:0;}
您可以尝试以下操作:

const data=[{“code_name”:“SNOMED”,“code_system_id”:“1234”},{“code_name”:“2BPRECISE”,“code_system_id”:“4567”},
{“代码名称”:“UMLS”,“代码系统id”:“7894”},
{“code_name”:“SNOMED”,“code_system_id”:“1234”}];
常量比较=(dirn)=>{
如果(dirn=='asc'){
返回(a,b)=>{
如果(a.code\u name==b.code\u name)返回0;
返回a.code\u name>b.code\u name?1:-1;
}
}else if(dirn=='desc'){
返回(a,b)=>{
如果(a.code\u name==b.code\u name)返回0;
返回a.code\u name>b.code\u name?-1:1;
}
}
}
console.log('asc',data.sort(compare('asc'));
console.log('desc',data.sort(compare('desc'))

.as console wrapper{min height:100%!important;top:0;}
减法运算符处理数字,而不是字母字符串。
.sort((a,b)=>a.code\u name>b.code\u name?1:-1)
。使用此选项。在浏览器控制台中尝试使用
“SNOMED”-“UMLS”
a.code\u name.localeCompare(b.code\u name)
会更好。@Michael还注意到,性能问题的根本问题是7年前的,大约在
.localeCompare()
可用的时候。减法运算符可以处理数字,不是字母字符串。
.sort((a,b)=>a.code\u name>b.code\u name?1:-1)
。使用此选项。在浏览器控制台中尝试使用
“SNOMED”-“UMLS”
a.code\u name.localeCompare(b.code\u name)
会更好。@Michael还注意到性能问题的根本问题是7年前的,大约在
.localeCompare()
可用的时候。如果
,则不需要第三个
;如果一个不比另一个大,唯一的可能就是它们相等。是的,可以去掉。我发布这篇文章只是为了解释比较器是如何工作的。如果
,则不需要第三个
;如果一个不比另一个大,唯一的可能就是它们相等。是的,可以去掉。我发布这篇文章只是为了解释比较器是如何工作的。