Я заполняю таблицу некоторыми json
и использую несколько элементов управления, чтобы попытаться отфильтровать таблицу.Пользователь выбирает 1 или все радиостанции, а затем нажимает кнопку фильтра, и таблица обновляется отфильтрованными значениями.Это прекрасно работает для каждой пары ключ / значение в моем json
, кроме одной.Мой json
выглядит следующим образом:
{
"id": "104",
"part_number": "PCF27340050",
"voltage": "400",
"noise_level": "72",
"rpm": "1420",
},
У меня есть <select>
элементы управления для voltage
, rpm
и noise_level
.Они заполняются во время выполнения путем получения различных значений из моего возвращаемого массива json
.
Вот как я фильтрую фильтры json
:
var selectedVoltage = ($selectVoltage[0].selectedIndex > 0) ? $selectVoltage.val() : '';
var selectedMaxRPM = ($selectMaxRPM[0].selectedIndex > 0) ? $selectMaxRPM.val() : '';
var selectedNoiseLevel = ($selectNoiseLevel[0].selectedIndex > 0) ? $selectNoiseLevel.val() : '';
var $filtered = $.grep(json,function(fan) {
(selectedVoltage === '' || fan.voltage === selectedVoltage) &&
(selectedMaxRPM === '' || fan.rpm <= selectedMaxRPM) &&
(selectedNoiseLevel === '' || fan.noise_level <= selectedNoiseLevel);
});
voltage
и noise_level
точно так, как ожидалось.rpm
нет.Я пытаюсь вернуть все, равное или меньше, чем выбранные обороты.Но он фильтрует только пару значений, оставляя записи, которые имеют большее значение, чем выбранные об / мин.Если я изменю <=
на ===
, он сработает и отфильтрует значение ТОЧНОГО об / мин, но я хочу отфильтровать все less than
или equal to
<= </p>
Единственное, что я могу вспомнитьэто может быть проблемой, когда я сортирую параметры <select>
при заполнении элементов управления select
.Я делаю это здесь:
//sort arrays that hold values for <select>
voltageArray.sort();
rpmArray.sort(function(a, b){return a-b}); //this is the only array I have to sort this way, otherwise it won't sort
noiseLevelArray.sort();
//Append array values to <select>
$.each(voltageArray, function(v) {
$selectVoltage.append('<option value="' + voltageArray[v] + '">' + voltageArray[v] + 'v</option>');
});
$.each(rpmArray, function(r) {
$selectMaxRPM.append('<option value="' + rpmArray[r] + '">' + rpmArray[r] + ' rpm</option>');
});
$.each(noiseLevelArray, function(n) {
$selectNoiseLevel.append('<option value="' + noiseLevelArray[n] + '">' + noiseLevelArray[n] + ' dBA</option>');
});
Набирая этот вопрос, я заметил, что если я не использую function(a, b){return a-b}
для сортировки массива rpm
, это работает!Элементы управления select
отсортированы неправильно, но это работает.Это сортируется так: 1100, 1120, 200, 220, 300
(сортировка по первой цифре, а не по возрастанию по значению), если я не использую function(a, b){return a-b}
.
Есть ли способ исправить это?Нужно ли сортировать массив rpm по-другому?Использование только функции .sort()
само по себе позволяет мне правильно фильтровать эти значения (но мой элемент управления select отсортирован неправильно).Использование .sort(function(a, b){return a-b})
по какой-то причине нарушает мой фильтр для этого поля (но правильно сортирует элемент управления select).