如何使用javascript在列表中不存在对象时添加对象?

时间:2016-01-26 04:18:13

标签: javascript

我有一个空数组:“testList = []” 我想要一个仅在对象存在的情况下添加对象的函数:

addIfNotInList({'keya':'a','keyb':'b'}, testList);
addIfNotInList({'keya1':'a5','keyb':'b2'}, testList);
addIfNotInList({'keya':'a','keyb':'b'}, testList);

结果应该是:

testList = [{'keya':'a','keyb':'b'},{'keya1':'a5','keyb':'b2'}]

通常如果它不是一个对象,我会这样做:if(testList.indexOf(stringvalue)) {testList.push(stringvalue)}

虽然我发现这不适用于对象。

4 个答案:

答案 0 :(得分:1)

您可以使用比较器

    var testList = [];

    var myComparator = function (obj1, obj2) {
      // check if they are the same
      return obj1.keya === obj2.keya && obj1.keyb === obj2.keyb;  
    };

    var addIfNotInList = function(obj, list, comparator) {
        // you can also declare the comparing function here as default
        comparator = comparator || myComparator;

        // check if already in the list
        var exists = list.some(function(listItem) {
            return comparator(obj, listItem);
        });

        if(!exists) {
            list.push(obj);
        }
    };

    addIfNotInList({'keya':'a','keyb':'b'}, testList);
    addIfNotInList({'keya':'a5','keyb':'b2'}, testList);
    addIfNotInList({'keya':'a','keyb':'b'}, testList);

    console.log(testList);

您还可以使用underscore.js的效用函数进行比较:isEqual

答案 1 :(得分:1)

execute()

您可以将对象与上面的代码进行比较,但这里有一些小技巧。如果两个对象都像JSON.stringify(obj1) === JSON.stringify(obj2); {x: 100, y: 1},则结果为true,但如果{{1}则显示为false }和{x: 100, y: 1}

答案 2 :(得分:0)

我会使用类似这样的东西,它循环遍历数组并根据你的参数检查每个项目。每次它与counter不匹配时,如果counter与数组末尾的长度一样大,那么该对象必须不匹配那里已有的任何对象。希望这有帮助!

var addIfNotInList = function(object, testList){

var counter = 0;

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

        if(testList[i]) !== object){

        counter++;

        }

    }

    if(counter === testList.length){

    testList.push(object)

    }

};

答案 3 :(得分:0)

您应该通过循环testList中的所有元素来比较对象相等性。如果您使用underscorejs,则非常简单。

function addIfNotInList(obj, list) {
    var doesNotExist = _.every(list, function(item) {
        return !_.isEqual(item, obj);
    });
    if (doesNotExist) {
        list.push(obj);
    }
}