消除JSON对象中的重复项

Joh*_*per 13 javascript json

[
  {
    "lastName": "Seymour",
    "gender": "Female",
    "patientID": 18134,
    "firstName": "Stephanie",
    "age": "111Y"
  },
  {
    "lastName": "Seymour",
    "gender": "Female",
    "patientID": 18134,
    "firstName": "Stephanie",
    "age": "111Y"
  }
]
Run Code Online (Sandbox Code Playgroud)

如何在添加是否包含此值之前检查我的json ...

Rob*_*nik 14

显而易见的方式

最明显的方法是使用for循环并迭代数组中的所有项目,并在每次想知道您是否已经有特定项目时进行比较.琐碎,但乏味,特别是当你有许多比较.

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;
};
Run Code Online (Sandbox Code Playgroud)

每当您要搜索现有对象时:

contains(arr, newObj);
Run Code Online (Sandbox Code Playgroud)

聪明(呃)的方式

此代码使用Javascript的功能,其原型可用作某种关联内存存储中的数组.假设您的JSON项目在arr变量中.定义比较密钥(说出它的名字和姓氏):

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

找出你的数组中是否已经有一个项目非常简单:

hash.contains(key);
Run Code Online (Sandbox Code Playgroud)

就是这样.比迭代整个数组快得多.特别是当它有很多项目时.

  • @John:没什么.我调试了它,它按预期工作.当它到达数组中的第一个对象时,它存储它的键,当它到达第二个时,它不会,因为它已经存在.您可能希望它从原始阵列中消除对象......好的.让我为你换一下...... [这里你去](http://jsfiddle.net/eMbmw/1/) (2认同)