Elminating duplicates in a JSON object

前端 未结 2 1193
刺人心
刺人心 2020-12-16 16:10
[
  {
    \"lastName\": \"Seymour\",
    \"gender\": \"Female\",
    \"patientID\": 18134,
    \"firstName\": \"Stephanie\",
    \"age\": \"111Y\"
  },
  {
    \"las         


        
2条回答
  •  一向
    一向 (楼主)
    2020-12-16 16:39

    Obvious way

    The most obvious way would be to use a for loop and iterate over all items in array and compare every time when you'd like to know whether you already have a particular item in it. Trivial but tedious especially when you have many compares to make.

    function contains(items, obj) {
        var itemKey = null;
        var objKey = obj.firstName + ";" + obj.lastName;
        var result = false;
        for(var i = 0; !result && i < arr.length; i++)
        {
            itemKey = items[i].firstName + ";" + items[i].lastName;
            result = itemKey === objKey;
        }
        return result;
    };
    

    Whenever you'd be searching for existing object:

    contains(arr, newObj);
    

    Smart(er) way

    This code uses the ability of Javascript whose prototypes can be used as arrays in a sort of associative memory storage. Suppose you have your JSON items in arr variable. Define your compare key (say it's first name and last name):

    var arr = /* your JSON object */;
    var hash = (function() {
        var keys = {};
        return {
            contains: function(key) {
                return keys[key] === true;
            },
            add: function(key) {
                if (keys[key] !== true)
                {
                    keys[key] = true;
                }
            }
        };
    })();
    
    var key = null;
    for (var i = 0; i < arr.length; i++)
    {
        key = arr[i].firstName + ";" + arr[i].lastName;
        if (!hash.contains(key))
        {
            hash.add(key);
        }
    }
    

    Finding out whether you already have an item in your array is then pretty simple:

    hash.contains(key);
    

    And that's it. Much faster than iterating over the whole array. Especially when it has many items.

提交回复
热议问题