Jquery数组:防止重复插入

时间:2012-05-19 13:41:48

标签: jquery arrays duplicates element

基于我见过的帖子。我通过单击超链接创建临时数组元素。我唯一的问题是它可以生成重复的元素,直到现在还没有解决:

var items = new Array();
$("ul.dropdown li a").click(function(e)
{
    e.preventDefault();

    var id      = $(this).attr('href');
    var name    = $(this).text();

    if(!$.findFromArray('id', id, items))
    {
        return false;       
    }
    else
    {
        items.push({
            "id"    : id,
            "name": name
        });

        //genate row
        var newRow = $("<tr itemId=\"" + id  + "\" />")
        .appendTo(".form_list.left tbody")
        .append("<td>" + name + "</td>")
        .append("<td><a href=\"#\" class=\"deleteRow\">delete</a></td>");


        $(".deleteRow", newRow).click(function(e) {
                e.preventDefault();
                items = $.removeFromArray('id', $(this).closest("tr").attr("itemId"), items);
                $(this).closest("tr").remove(); 
        });     
    }
});

我创建了一个函数“$ .FindFromArray”,它在数组中搜索insert,如果要避免在数组中插入并在表中生成一行,则返回FALSE:

$.findFromArray = function(property, value, arr)
{
    $.each(arr, function(elem, index)
    {
        if(elem[property] === value)
        {
            return false;           
        }   
    }); 
};

但是这个函数总是让我返回FALSE。

在插入元素之前,我可以避免重复吗?如果有更好的方法...我希望我能提供帮助。

2 个答案:

答案 0 :(得分:3)

将方法改为

$.findFromArray = function(property, value, arr)
{
    var matching = $(arr).filter(function(index, elem)
    {
        return elem[property] === value;
    }); 
    return matching.length > 0;
};

如果 找到 数组中的元素(使其更具可读性),则会返回true,所以你还应该将支票改为

if( $.findFromArray('id', id, items) )

删除了!

答案 1 :(得分:1)

你在$ .each中混合了index和element的顺序,你只从$ .each函数内部返回,而不是$ .findFromArray函数:

$.findFromArray = function(property, value, arr)
    var ret=false;
    $.each(arr, function(index, elem) {
        if (elem[property] === value) ret=true;
    }); 
    return ret;
};