从JavaScript中的JSON文件中删除重复对象

从JavaScript中的JSON文件中删除重复对象,javascript,json,Javascript,Json,这是当前的JSON文件: [{ "name": "Peter", "age": 30, "hair color": "brown" }, { "name": "Steve", "age": 55, "hair color": "blonde" }, { "name": "Steve", "age": 55, "hair color": "blonde" }] 我想从列表中删除重复的Steve个人。如何创建新的JSON来检查

这是当前的JSON文件:

[{
    "name": "Peter",
    "age": 30,
    "hair color": "brown"
}, {
    "name": "Steve",
    "age": 55,
    "hair color": "blonde"
}, {
    "name": "Steve",
    "age": 55,
    "hair color": "blonde"
}]
我想从列表中删除重复的Steve个人。如何创建新的JSON来检查对象的名称是否匹配并删除JavaScript中的任何重复项?

使用和函数:

_.uniq(array, false, function (item) { return item.name; })

回路,检查,拼接,重复:

var distinctValues = {};
for (var i = 0; i < data.length; i++) {
    if (distinctValues.hasOwnProperty(data[i].name]) {
        //already has it
        data.splice(i, 1);
        i--;
    } else {
        distinctValues[data[i].name] = true;
    }
}
var distinctvalue={};
对于(变量i=0;i
您必须将JSON数据加载到程序中并用解析,如下所示

var array = JSON.parse(content.toString())
要从对象数组中筛选出重复的名称,我们使用函数。您可以将名称存储在对象中,下次出现相同名称时,我们只需从结果中筛选出

var seenNames = {};

array = array.filter(function(currentObject) {
    if (currentObject.name in seenNames) {
        return false;
    } else {
        seenNames[currentObject.name] = true;
        return true;
    }
});

console.log(array);
# [ { name: 'Peter', age: 30, 'hair color': 'brown' },
#   { name: 'Steve', age: 55, 'hair color': 'blonde' } ]

来自CLI的Python一行程序:

cat file_with_duplicates.json | python2-c'import sys;import json;sys.stdout.write(json.dumps(reduce(lambda x,y:x+[y]如果y不在x中,则x,json.loads(sys.stdin.read(),[])”>unique_items.txt
var数据=[{
“姓名”:“彼得”,
“年龄”:30岁,
“头发颜色”:“棕色”
}, {
“姓名”:“史蒂夫”,
“年龄”:55岁,
“头发颜色”:“金发”
}, {
“姓名”:“史蒂夫”,
“年龄”:55岁,
“头发颜色”:“金发”
}]
数据=此.data.filter((obj、pos、arr)=>{
返回arr.map(mapObj=>
mapObj.name).indexOf(对象名称)==pos;
});

console.log(数据)
顺序重要吗?那么你只关心
名称,而不关心其他属性?顺序不重要。我们只关心“name”是否匹配。如果有两个相同的,只剩下一个。@user2836857如果对象中的其他细节不同呢?保留哪一个?好问题。我假设它们是al我说的没错,但你提出了一个很好的观点。没有否决票,但我认为OP没有提到任何关于下划线的内容。@thefourtheye我很清楚。答案没有错,只是建议使用JS工具。如果OP不想只为这一项任务包含整个库,这是无关紧要的。你应该先做出决定。@Cookie Monster我不是是的,我给出的代码建议使用一个库,当然人们通常不想在混合中添加另一个库。然而,这是一个非常声明性的代码。例如,Fourtheye的答案就不那么简洁,也不那么容易理解。对每个人来说,他自己的答案是n我猜。@TimothyShields甚至我都喜欢使用
下划线
:)在执行
.splice()
,或反向迭代时,您需要减量
I
。@cookiemonster--该死,我总是忘了…:\