Сортировка валюты в таблице начальной загрузки

Я хочу добавить знак валюты к своему номеру, сохраняя возможность сортировки значения как числа в моей таблице начальной загрузки (строка 30-34; столбец 4 в таблице):

for (var p=0; p<variable_data.length; p++){
    try{
        variable_data[p]["4"] = "$" + Math.round(variable_data[p]["4"])
    } catch(e){ }
}

http://jsfiddle.net/mademoiselletse/s0d1xgzt/

Значения с присоединенным символом $ сортируются в виде строк, а не чисел. Все проблемы с сортировкой валюты, которые я обнаружил в Интернете, относятся к плагинам DataTable и tablesorter(). Есть ли более быстрое решение проблемы, чем установка большего количества плагинов jQuery?

Большое спасибо за Вашу помощь!

2 ответа

Проверьте пользовательский пример здесь

Вам необходимо отправить data-sorter function это удаляет $ из вашей строки, а затем сравнивает его как числа.

Я слишком новичок, чтобы комментировать пост Арта, но хотел добавить примечания к тому, что сработало для меня. Функция totalCurrencySort в посте Арта сработала для меня. В заголовке таблицы у меня был атрибут сортировщика данных (в отличие от сортировщика).

function totalCurrencySorter(a, b, rowA, rowB) {
a = +a.substring(1);  // remove $
b = +b.substring(1);
if (a > b) return 1;
if (a < b) return -1;
return 0;
}

function totalCurrencyFormatter(data) {
var field = this.field
return '$' + data.map(function (row) {
return +row[field].substring(1)
}).reduce(function (sum, i) {
return sum + i;
}, 0)
}

Для HTML-таблицы заголовок обычно такой:

<thead>
<tr>
<th data-field="id" data-sortable="true">ID</th>
<th data-field="exp_date" data-sortable="true">Date</th>
<th data-field="amount" data-sortable="true" formatter="totalCurrencyFormatter" data-sorter="totalCurrencySorter">Amount</th>
</tr>
</thead>

Чтобы добавить к ответам Art и OptimisticToaster, я тоже слишком новичок, чтобы комментировать, поэтому мой взгляд на проблему таков:

function totalCurrencySort(a, b, rowA, rowB) {  
    
    a = Number(a.replace(/[^0-9.-]+/g,""));
    b = Number(b.replace(/[^0-9.-]+/g,""));
    
    if (a > b) return 1;
    if (a < b) return -1;
    return 0;
}

Я работал с числами, отформатированными таким образом, что 1000,50 фунтов стерлингов, поэтому удаление любых нечисловых значений позволяет сортировке работать в любом формате, который использует фигура.

Я столкнулся с похожими проблемами и, наконец, посмотрел исходный код примера пользовательского сортировщика с их реального веб-сайта: http://issues.wenzhixin.net.cn/bootstrap-table/.

Для начала, при определении столбца, содержащего значения валюты / денег / доллара, добавьте ссылку для сортировщика на любую функцию javascript, которую вы хотите использовать. Вот как выглядит мое определение столбца валюты:

[
    "field" => "total",
    "title" => "Total",
    "sortable" => true,
    "sorter" => "totalCurrencySort"
]

После этого вы захотите создать функцию javascript, которая будет выполняться при сортировке данного столбца. Здесь мы определяем totalCurrencySort, который может принимать 4 параметра, однако нужны только первые два.

function totalCurrencySort(a, b, rowA, rowB) {  
    a = +a.substring(1); // remove $
    b = +b.substring(1);
    if (a > b) return 1;
    if (a < b) return -1;
    return 0;
}

Чтобы сделать правильное сравнение, "$" удаляется - по желанию - и числовая оценка определяет правильное состояние сортировки между двумя значениями и возвращает соответственно. Ссылка rowN предоставляет полный набор данных строки на тот случай, если вашей пользовательской логике сортировки требуются более сложные вычисления с использованием других данных из строки.

Другие вопросы по тегам