2016-02-05 2 views
2

У меня есть набор результатов для объекта. Она имеет НИЖЕ записейКак сортировать массив на основе значения объекта в JavaScript?

var resultset = [{0: "A", 1: "25.14", 2: "0,0,0,0,30.79,0,7.68,0,0,6.13,0,0"}, 
{0: "B", 1: "3.26", 2: "0,0,0,31,0,0,0,0,0,0,0,0"}, 
{0: "C", 1: "37.01", 2: "0,0,0,0,0,0,0,0,0,0,0,0"}, 
{0: "D", 1: "1.18", 2: "0,0,0,9.63,0,0,0,0,0,0,0,0"}, 
{0: "E", 1: "0.28", 2: "0,0,0,13.22,0,0,0,0,0,0,0,0"}] 

Я использовал для сортировки этого объекта на основе значения, т.е. индекс 1, используя ниже код,

resultset.sort(compareSecondColumn); 

function compareSecondColumn(a, b) { 
    //alert("A Value -->"+a[1]); 
    //alert("B Value -->"+b[1]); 
    if (a[1] == b[1]) { 

     return 0; 
    } 
    else { 
     //alert(b[1]); 
     return (a[1] > b[1]) ? -1 : 1; 
     } 
    } 

Но я не в состоянии сортировать на основе индекса 1.

Мой ожидаемый результат как ниже сортируются на основе индекса 1 (37,01)

{0: "C", 1: "37.01", 2: "0,0,0,0,0,0,0,0,0,0,0,0"} 
{0: "A", 1: "25.14", 2: "0,0,0,0,30.79,0,7.68,0,0,6.13,0,0"} 
{0: "B", 1: "3.26", 2: "0,0,0,31,0,0,0,0,0,0,0,0"} 
{0: "D", 1: "1.18", 2: "0,0,0,9.63,0,0,0,0,0,0,0,0"} 
{0: "E", 1: "0.28", 2: "0,0,0,13.22,0,0,0,0,0,0,0,0"} 

Я пытался сделать какой-то объект механизм сортировки ниже URL. Но я не буду работать.

http://www.javascriptkit.com/javatutors/arraysort2.shtml

Sorting JavaScript Object by property value

+0

@Tushar Включено мой ожидаемый результат, вы можете получить на мой вопрос? – Dhinakar

+0

Учитывая, что поле, которое вы сортируете, представляет собой строку, заканчивающуюся символом%, ваша функция сортировки должна преобразовывать значения в числа для числовой сортировки. Используйте parseFloat(), он автоматически игнорирует%. – nnnnnn

+0

@nnnnnn Я могу преобразовать это в число. Это не проблема. даже я меняю, я не могу этого сделать. это моя проблема. :( – Dhinakar

ответ

4

Вы не можете сортировать строки, просто разобрать, как поплавок, а затем сравнить

function compareSecondColumn(a, b) { 
    var valueA = parseFloat(a[1]); 
    var valueB = parseFloat(b[1]); 
    if (valueA == valueB) { 
     return 0; 
    } else { 
     return (valueA > valueB) ? -1 : 1; 
    } 
} 
+0

Выглядит хорошо, работает. Но почему вы используете '=='? Я бы предложил использовать '===', так как мы сравниваем примитивы, большинство инструментов linting будут жаловаться на это. – yangmillstheory

2

Вы пытаетесь сортировать строку там.

Вы должны проанализировать значение и сделать это как,

resultset.sort(function(a, b){ 
    return parseFloat(b[1]) - parseFloat(a[1]); 
}); 
+0

Я думаю, что это в противоположном намеренном порядке (должно быть 'parseFloat (b [ 1]) - parseFloat (a [1]) '), но это плавная реализация. – yangmillstheory

+0

@yangmillstheory Oops .. Tq для заметок .. Обновлен код. – choz

Смежные вопросы