2016-04-22 21 views
1

我有一个数组是这样的:使用Javascript - 字母排序,然后数字

['honda accord', '1986 honda accord', '1990 honda accord', '2000 honda accord', '2011 honda accord', '2016 honda accord']. 

,我需要这样的结果是排序这在javascript:

['honda accord', '2016 honda accord', '2011 honda accord', '2000 honda accord', '1990 honda accord', '1986 honda accord']. 

我怎么能做到这一点。

array.sort() 

不起作用。 我知道我需要发送一个函数来排序。

感谢 布赖恩

回答

2

你可以使用split和检查字符串的第一个项目

var arr = ['honda accord', '1986 honda accord', '1990 honda accord', '2000 honda accord', '2011 honda accord', '2016 honda accord']; 
 

 
arr.sort((a, b) => b.split(' ')[0] - a.split(' ')[0]) 
 

 
document.write(JSON.stringify(arr));

+1

这是不是在这里,做得好 – JordanHendrix

+1

这工作,抽出时间来帮助感谢溶液与更换 – user1050544

1

工作小提琴:https://jsfiddle.net/7nu7bp3g/

var arr = [ 
      'honda accord', 
      '1986 honda accord', 
      '1990 honda accord', 
      '2000 honda accord', 
      '2011 honda accord', 
      '2016 honda accord' 
      ]; 

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

console.log(sortArr); 

我希望它能起作用。

0

它不是很优雅(或高效),但它的工作原理。从本质上讲,它使用正则表达式从每辆车中提取年份,然后进行比较。

// the regular expression to extract the year and car 
var regEx = /((\d+)\s)*(.*)/; 

var list = ['honda accord', '1986 honda accord', '1990 honda accord', '2000 honda accord', '2011 honda accord', '2016 honda accord']; 

// custom sort function 
list.sort(function(a, b) 
{ 
    // get the car details 
    var aR = regEx.exec(a); 
    var bR = regEx.exec(b); 

    var aCar = aR[3]; 
    var bCar = bR[3]; 

    var aYear = aR[2]; 
    var bYear = bR[2]; 

    // compare the strings 
    if(aCar < bCar) return -1; 
    else if(aCar > bCar) return 1; 
    // we'll only get this far if both strings are the same 

    // if there was no year provided then it should be first 
    else if(!aYear) return -1; 
    else if(!bYear) return 1; 

    // at this point the car types are the same, and both have an year so compare the year 
    else if(aYear < bYear) return 1; 
    else if(aYear > bYear) return -1; 
    return 0; 
}) 

您可以通过预处理列表以在所有项目上运行正则表达式来提高效率。

0

如果未给定年份

var array = ['honda accord', '1986 honda accord', '1990 honda accord', '2000 honda accord', '2011 honda accord', '2016 honda accord']; 
 

 
array.sort((a, b) => b.replace(/^\D*$/g, '9999 $1').localeCompare(a.replace(/^\D*$/g, '9999 $1'))); 
 

 
document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

相关问题