2012-06-01 2 views
1

У меня есть массив, как это с десятичными значениямиКак отсортировать массив с символом?

["$79.34", "$99.23", "$149", "$139.34", "$379", "$199.00", "$5", "$9", "$14", "$39", "$59", "$24", "$29", "$189", "$10,$20", "$500", "$1", "$4", "$8.66", "$2", "$19", "$18", "$11", "$15", "$40", "$89", "$100", "$400.15", "$30,$119", "$15,$30"]

Для моего магазина, и я не могу понять, как использовать JavaScript, чтобы отсортировать их? $ (или любой символ в этом отношении), кажется, вызывает проблемы для меня?

Как я могу это решить?

+1

Как насчет значений, в которых, как представляется, есть две отдельные суммы в одной строке, например, последние две (среди прочих): '' $ 30, $ 119 "," $ 15, $ 30 "' - это опечатка или преднамеренная ? –

+0

ah thats намеренно - результаты могут быть такими? – Andy

+2

Это значительно усложняет проблему. – Codeman

ответ

3
var prices = [...] 
prices.sort(function(a,b) { return (a.substring(1)) - (b.substring(1)); }) 

будет делать трюк.

+0

Только проблема с этим заключается в том, что он не обрабатывает случай «$ 10, $ 20», хотя было бы очень странно иметь это как данные – Codeman

+0

Да, согласился :). – Art

0

EDIT: Я написал JSFiddle to demonstrate this

function sortPrices(priceStrings) 
{ 
    //first sanitize the data 
    for (var i = 0; i < priceStrings.length; i++) 
    { 
     if (priceStrings[i].toString().search(",") != -1) 
     { 
      var splits = priceStrings[i].toString().split(","); 
      priceStrings.splice(i, 1) 
      priceStrings = priceStrings.concat(splits); 
      i--; 
     } 
    } 
    var prices = []; 
    for (var i = 0; i < priceStrings.length; i++) 
    { 
     priceStrings[i] = priceStrings[i].toString().replace("$", ""); 
     prices.push(parseFloat(priceStrings[i])); 
    } 

    prices.sort(function(a,b){return a - b}); 

    return prices; 
}​ 
Смежные вопросы