2016-04-22 20 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>');

相關問題