jQuery grep过滤数组只有一个字段错误

时间:2018-06-06 00:11:40

标签: php jquery arrays sorting

我正在用一些json填充一个表,并使用一些控件来尝试过滤表。用户选择1个或所有无线电,然后按下过滤器按钮,表格将使用过滤值更新。这适用于json中除{1}之外的每个键/值对。我的json看起来像这样:

{
"id": "104",
"part_number": "PCF27340050",
"voltage": "400",
"noise_level": "72",
"rpm": "1420",
},

我对<select>voltagerpm拥有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);
});

voltagenoise_level完全按预期过滤。 rpm没有。我正在尝试返回等于或小于所选rpm的所有内容。但它只过滤了几个值,使得条目的值大于所选的rpm。如果我将<=更改为===它可以正常工作并过滤EXACT rpm值,但我想过滤所有内容less thanequal to&lt; =

我能想到的唯一另一件事可能是问题是当我在填充<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()函数可以让我正确过滤这些值(但我的选择控件没有正确排序)。由于某种原因,使用.sort(function(a, b){return a-b})会破坏我对该字段的过滤器(但正确对我的选择控件进行排序)。

0 个答案:

没有答案