Javascript 如何在字符串数组中使用自然排序?

Javascript 如何在字符串数组中使用自然排序?,javascript,sorting,Javascript,Sorting,我有以下数组和排序结果: ['53-15-9', '53-15-10', '53-15-8'].sort() // => ["53-15-10", "53-15-8", "53-15-9"] 但我需要得到以下结果: ["53-15-8", "53-15-9", "53-15-10"]; 如何获得所需的结果?要比较数字而不是字符串,请先删除'-'。当你使用算术时 操作时,JavaScript首先将其转换为数字 '53-15-9'。替换(/-/g',)给出了'53159'。您可以使用sor

我有以下数组和排序结果:

['53-15-9', '53-15-10', '53-15-8'].sort() // => ["53-15-10", "53-15-8", "53-15-9"]
但我需要得到以下结果:

["53-15-8", "53-15-9", "53-15-10"];

如何获得所需的结果?

要比较数字而不是字符串,请先删除
'-'
。当你使用算术时 操作时,JavaScript首先将其转换为数字

'53-15-9'。替换(/-/g',)
给出了
'53159'
。您可以使用
sort()
中的闭包传递比较函数,该函数可以简单地从b中减去a。以下函数将对数组进行升序排序:

['53-15-9','53-15-10','53-15-8']排序(函数a,b){
返回a.replace(/-/g')-b.replace(/-/g'))

})
您可以使用自定义功能对零件进行拆分和排序

var数组=['53-15-9','53-15-10','53-15-8'];
array.sort(函数(a,b){
var aa=a.split('-'),
bb=b.拆分('-'),
i、 r=0,l=数学最大值(aa.长度,bb.长度);
对于(i=0;!r&&iwrite(“”+JSON.stringify(数组,0,4)+“”)您需要定义自己的自定义排序功能。以下是一个例子:

['53-15-9', '53-15-10', '53-15-8'].sort(function(a, b) {
  var aNum = parseInt(a.replace(/-/g, ''));
  var bNum = parseInt(b.replace(/-/g, ''));
  return aNum < bNum ? -1 : aNum > bNum ? 1 : 0;
});
['53-15-9','53-15-10','53-15-8']排序(函数a,b){
var-aNum=parseInt(a.replace(/-/g');
var bNum=parseInt(b.replace(/-/g');
返回aNumbNum-1:0;
});
假设您希望按数字顺序对它们进行排序,包括所有部分,只需删除
-
,将它们解析为int,然后在自定义排序函数中对int进行排序

["53-15-8", "53-15-9", "53-15-10"]
输出


尝试使用
Array.prototype.every()

var-arr=[“53-15-8”、“53-15-9”、“53-15-10”];
arr.sort(函数(a,b){
var curr=a.split(/-/).map(编号);
var next=b.分割(/-/).映射(编号);

return curr.every(function(val,key){return val将它们转换为数字以进行比较您应该检查@Maxali的答案。虽然说的不多,但这正是您需要的。另外-学习如何提供您自己的比较函数进行排序。检查和不带正则表达式:
返回a.split('-').join(')-b.split('-').join(''')
但如果您添加
54-1-1
它将在开头排序,可能应该在结尾。@Oriol因为它转换为数字。而5411小于531519。\@Maxali我知道原因。我只是注意到这可能是不需要的。@Oriol我更新以实现此排序。检查答案。
['1',2']
['2','1']
@Oriol是,当前正在更新。
.every()
未返回预期结果。方法是比较每个以“-”分隔的数字。Oriol请参阅更新的帖子。将比较运算符调整为
现在
['1-2',2-1']
排序为
['2-1',1-2']
@Oriol请参阅更新的帖子。用返回的
a
b
替换为
-1
1
注意,您返回的是布尔值而不是数字。
false
将被视为
0
,这意味着两个值应被视为相等。我找不到任何反例,但我不确定这是否完全正确定义良好。如果不是,则排序结果将取决于实现。
var arr = ['53-15-9', '53-15-10', '53-15-8'];
arr.sort(function(a,b){ return a.replace(/-/g,'') - b.replace(/-/g,'') });  
console.log(arr);
["53-15-8", "53-15-9", "53-15-10"]