JS jQuery每个循环过滤器附加列表

时间:2016-07-25 14:34:50

标签: javascript jquery

我正在使用抓取数据进行ajax调用,如下所示:

{
    "cars":[{
        "id":"654",
        "type": "ford",
        "active": "1"
    },{
        "id":"650",
        "type": "fiat",
        "active": "0"
    }]
} 

然后我使用这些代码填充选择框:

$.ajax({
    url: 'myurlhere',
    method: 'GET',
    async: false,
    success: function(result) {

        $.each(result, function(result, value) {
            $('#myselect').append($('<option>').text(value.id).attr('value', value.id));
        });

    }
});

我的问题是我只想使用有效=&#34; 1&#34; (对于数据)

的数据填充选择内容

所以我做到了这一点:

$.ajax({
    url: 'myurlhere',
    method: 'GET',
    async: false,
    success: function(result) {

        if (value.active = 1) {
            $.each(result, function(result, value) {
                $('#myselect').append($('<option>').text(value.id).attr('value', value.id));
            });
        }

    }
});

但这并没有过滤它,仍然全部归还。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

首先,您需要删除async: false,因为使用它是非常糟糕的做法。

其次,您可以使用filter()数组上的result.cars仅查找active'1'的地方:

var data = result.cars.filter(function(obj) {
    return obj.active == '1';
})

$.each(data, function(result, value) {
    $('#myselect').append($('<option>', {
        text: value.id,
        value: value.id
    }));
});

或者您也可以在$.each循环中执行此操作,但请注意,您需要遍历result.cars,而不是result

$.each(result.cars, function(i, value) {
    if (value.active == '1') {
        $('#myselect').append($('<option>', {
            text: value.id,
            value: value.id
        }));
    }
});

这将取决于阵列中有多少活动元素以及上述哪种方法会更快,尽管实际上可能没有太大的差别。理想情况下,您可以将响应修改为仅返回活动对象,但我认为这是第三方API,因此无法控制。

答案 1 :(得分:2)

您的if语句正在为初学者进行分配,而不是检查相等性。需要value.active === "1"此外,你想在.each方法中使用if语句,而不是在外面。

答案 2 :(得分:0)

如果它不起作用,请告诉我 希望这会有所帮助。

.ajax({
    url: 'myurlhere',
    method: 'GET',
    async: false,
    success: function(result) {
        $.each(result.cars, function(key, value) {
            if(value.active == 1) {
                $('#myselect').append($('<option>').text(value.id).attr('value', value.id));
            }    
        });
    }
});