检查数组中是否存在对象,如果没有则推送到它

时间:2014-01-31 12:48:23

标签: javascript jquery arrays

好的,我已经在我的例子中尝试了在stackoverflow上找到的几个例子,但没有任何东西可以帮助我。我有一个包含12个对象的数组,看起来像这样

var buttons = [ {"tag":"adr","color":"#123456"},
           {"tag":"ag","color":"#123456"},
           {"tag":"fax","color":"#123456"},
           {"tag":"ind","color":"#123456"},
           {"tag":"sname","color":"#123456"},
           {"tag":"per","color":"#123456"},
           {"tag":"tel","color":"#123456"},
           {"tag":"url","color":"#123456"},
           {"tag":"url","color":"#123456"},
           {"tag":"weblink","color":"#123456"},
           {"tag":"weblink","color":"#123456"},
           {"tag":"close","color":"#123456"} ];

我想把它推到另一个数组var buttonsP,如果它不在那个数组中的话。我尝试使用jquery .grep选项(以及其他示例):

var buttonsP =[];

for (var i = 0; i < buttons.length; i++){

    var newObject = { "valueTagP": buttons[i].tag, "colorTagP": buttons[i].color };    
    if( $.grep(buttonsP, function(obj) { return obj.valueTagP != buttons[i].tag; }) ){
        buttonsP.push(newObject);
    }
}

for (var i = 0; i < buttonsP.length; i++){
    $(".list").append("<li>"+ buttonsP[i].valueTagP + ", " + buttonsP[i].colorTagP +"</li>");
}

但没有删除重复项。

您可以在此处查看和修改我的情况:http://jsfiddle.net/M4mA9/

我做错了什么?

4 个答案:

答案 0 :(得分:2)

$.grep将根据条件返回匹配的数组。您可以在http://api.jquery.com/jquery.grep/

看到详细信息

您的代码应该像

    var newObject = { "valueTagP": buttons[i].tag, "colorTagP": buttons[i].color };   
    var newArr = $.grep(buttonsP, function(obj) {             
        return obj.valueTagP === buttons[i].tag; 
    });
    if(newArr.length === 0) {
        buttonsP.push(newObject);
    }

我修改了您的代码并更新了fiddle

答案 1 :(得分:1)

我假设 buttonsP 仅包含按钮

在那种情况下,

而不是将按钮设为数组,将其设为

对象
var buttons = {key : "some_unique_key",
               value: /*put your buttons array here*/}

现在 buttonsP 将包含按钮对象(不是按钮数组)

现在,您可以根据键轻松找到阵列中的按钮对象(确保它是唯一的) 并插入,如果它不存在。

答案 2 :(得分:1)

var buttonsP = $.grep(buttons, function (obj, i) {
    var m = buttons.filter(function (v) {
        return v.tag === obj.tag;
    })[0];
    return $.inArray(m, buttons) === i;
});

http://jsfiddle.net/f22dv/

答案 3 :(得分:0)

如果您可以使用JQuery,请尝试:

var a1 = ["Cecilie", "Lone"];
var a2 = ["Cecilie", "Emil"];
var b = $.unique($.merge($.merge([], a1), a2));