2015-03-19 1 views
2

Я использовал dc.js для создания таблицы данных, и мое требование состоит в сортировке таблицы данных по убыванию нескольких столбцов. Я использовал следующий код:dc.js сортировать данные по нескольким столбцам

.order(d3.descending) 
    .sortBy(function (d) { 
      return d.columnOne; 
      return d.columnTwo; 
}); 

Пожалуйста, помогите.

+0

То, что у вас есть, просто вернет 'd.columnOne' и игнорирует остальные. Вы пытаетесь использовать 'd.columnTwo' в качестве вторичного ключа сортировки? – Gordon

+0

Да, Гордон, я хочу отсортировать несколько столбцов таблицы данных, свойства столбца - 'd.columnOne' и' d.columnTwo'. – ali

ответ

2

Ваша функция, которую вы передаете sortBy, должна вернуть один ключ, который будет лексикографически или численно сортировать строки в том порядке, в котором вы хотите.

Невозможно вернуть два значения, как вы пытаетесь сделать там. Вместо

  1. если оба столбца строки объединить значения в виде строк, разделенных символом, который имеет более низкое значение ASCII, чем любой символ в columnOne или
  2. если оба столбец числовые, умножать columnOne рядом которая больше, чем любое значение в columnTwo, а затем добавить два значения

Подход один, для строк:

.order(d3.descending) 
    .sortBy(function (d) { 
      return [d.columnOne,d.columnTwo].join('\x0'); 
}); 

подход два, для чисел

.order(d3.descending) 
    .sortBy(function (d) { 
      return d.columnOne * 1e9 + d.columnTwo; 
}); 

Я заранее извиняюсь, если есть какие-либо ошибки в этом коде, так как он не тестировался.

Я не знаю, как это сделать, если один столбец является числовым, а другой - строкой.

1

метод Гордона работал для меня, с небольшой поправкой

Мои две колонки были одна строка, один цифровой и я использовал

.sortBy(function (d) { 
    return [d.columnOne,d.columnTwo].join(); 
}); 

Это сделал трюк. Спасибо, Гордон! :-)

+1

Рад, что я мог помочь. Однако следите за тем, чтобы вы не получали лексикографическую сортировку, а не цифровую сортировку по номерам. Например. «A, 10» будут сортироваться ниже «A, 2» в виде строки. Единственный способ, с помощью которого я могу работать, это убедиться, что ваши номера имеют нулевую ширину до максимальной ширины, например. «A, 10», «A, 02». – Gordon

+0

В этом отношении «10, A» будет сортировать ниже «2, A» в виде строки. – Gordon

+0

Запоздалая благодарность. Вы были на месте. Я понял, что в конце ночи произошло то, что произошло, а также то, что заполнение 0s обеспечит его правильное применение. Еще раз спасибо. –