Splice删除多个索引

时间:2017-10-05 20:56:43

标签: javascript jquery

我正在创建自己的过滤系统来过滤数据,现在我正在构建基本功能,例如添加和删除过滤器。

添加过滤器工作正常,但是当我玩添加和删除时,有时splice会删除多个过滤器。它为什么这样做?这是我的代码:

    var active_filters = [];

    var available_filters = [
        'first_name', 'last_name', 'city'
    ];

    var filters = {
        first_name: {
            title: 'First Name',
            is_active: false,
            types: [
                {
                    input: 'text'
                },

                {
                    input: 'select',
                    options: [
                        'asc', 'desc'
                    ],
                    values: [
                        'Ascending', 'Descending'
                    ]
                }
            ],

        },

        last_name: {
            title: 'Last Name',
            is_active: false,
            types: [
                {
                    input: 'text'
                },

                {
                    input: 'select',
                    options: [
                        'asc', 'desc'
                    ],
                    values: [
                        'Ascending', 'Descending'
                    ]
                }
            ],

        },

        city: {
            title: 'City',
            is_active: false,
            types: [
                {
                    input: 'text'
                },
            ],

        },
    };

    var id_filters = $("#filters");

    $(document).ready(function () {
        id_filters.html(template_filters(filters));
    });

    function template_filters(filters) {
        var html = '<select class="select_filters" id="select_filters" onchange="add_filter();">';

        html += '<option value="0">Select Filter</option>';

        for (var property in filters)
        {
            if (filters.hasOwnProperty(property))
            {
                var title = filters[property].title;
                var is_active = filters[property].is_active;
                var types = filters[property].types;

                html += '<option value="'+property+'">'+title+'</option>';
            }
        }

        html += '</select>';

        return html;
    }

    function template_show_filter(filter, filter_name)
    {
        var html = '<div id="filter-'+filter_name+'" class="div_filter">';

        html += '<span>'+filter.title+' <a href="javascript:void(0)" onclick="remove_filter(\''+filter_name+'\')">X</a></span>';

        html += '</div>';
        return html;
    }

    function add_filter()
    {
        var select_filters = $("#select_filters");
        var selected_filter = select_filters.val();

        if (selected_filter != 0)
        {
            if (active_filters.length == 0)
            {
                active_filters.push(selected_filter);
                id_filters.append(template_show_filter(filters[selected_filter], selected_filter));
            }
            else
            {
                if (active_filters.indexOf(selected_filter) === -1)
                {
                    active_filters.push(selected_filter);
                    id_filters.append(template_show_filter(filters[selected_filter], selected_filter));
                }
            }


        }
    }

    function remove_filter(filter_name)
    {
        var index = active_filters.indexOf(filter_name);



        if (index >= 0)
        {
            var id = $("#filter-"+filter_name);
            id.remove();

            active_filters.splice(index); // here, it removes more than one
        }
    }

2 个答案:

答案 0 :(得分:5)

请查看MDN web docs – Array.prototype.splice()

如果您只想删除一个项目,请拨打fname = 'load_even.txt' data = []; cnt = 1; with open(fname, 'r') as infile: for line in infile: if cnt%2 == 0: data.append(line) cnt+=1

如果你没有指定第二个参数,“那么从数组末尾的start index开始的所有元素都将被删除。”

答案 1 :(得分:0)

这是因为你正在拼接索引。

active_filters.splice(index);

这将删除索引值之后的所有元素。