根据元素中存在的数字对字符串数组进行排序

时间:2018-03-21 06:10:02

标签: javascript

我必须根据数字对字符串数组进行排序。

示例

["1.READ","10.CREATE","3.sfg","2.dfd","12.dqwe"];

期望的结果

["1.READ","2.dfd","3.sfg","10.CREATE","12.dqwe"];

我的代码

var arr = ["1.READ","10.CREATE","3.sfg","2.dfd","12.dqwe"];
var arr2 = arr.map( a => a.split('.').map( n => +n+100000 ).join('.') ).sort().map( a => a.split('.').map( n => +n-100000 ).join('.') );
console.log(arr);
console.log(arr2);

3 个答案:

答案 0 :(得分:3)

您可以split将第一个元素转换为Number

var arr = ["1.READ", "10.CREATE", "3.sfg", "2.dfd", "12.dqwe"];

var arr2 = arr.sort((a, b) => {
  return Number(a.split(".")[0]) - Number(b.split(".")[0]);
});

console.log(arr2);

上面的代码也会对第一个变量进行排序。如果您只想对arr2进行排序,您可以:

var arr = ["1.READ", "10.CREATE", "3.sfg", "2.dfd", "12.dqwe"];

var arr2 = [...arr]; //Spread the array so that it will not affect the original
arr2.sort((a, b) => {
  return Number(a.split(".")[0]) - Number(b.split(".")[0]);
});

console.log(arr);
console.log(arr2);

答案 1 :(得分:3)

你可以拆分并只采取第一部分。然后取三角形进行排序。

var array = ["1.READ", "10.CREATE", "3.sfg", "2.dfd", "12.dqwe"];

array.sort((a, b) => a.split(".")[0] - b.split(".")[0]);

console.log(array);

答案 2 :(得分:1)

这是:

var arr = ["1.READ","10.CREATE","3.sfg","2.dfd","12.dqwe"];

arr.sort(function(a, b) {
    return a.split('.')[0] - b.split('.')[0];
});

console.log(arr)
// ["1.READ", "2.dfd", "3.sfg", "10.CREATE", "12.dqwe"]

这个答案基于内置数组排序功能,具有可自定义的比较逻辑。 请查看此内容以获取更多详细信息:Javascript Array Sort

干杯,