通过数组中每个JSON对象的值从JSON数组中删除重复项

Removing duplicates from JSON array by a value in each JSON object in array

本文关键字:JSON 数组 删除 对象      更新时间:2023-09-26

如果数组中有两个JSON对象具有相同的值,那么我想将它们标记为重复的。我想去掉其中一个。类似地,当有多个副本时,我只想保留最后一个对象(最新的)。如果是输入:

names_array = [
    {name: "a",  age: 15},
    {name: "a",  age: 16},
    {name: "a",  age: 17},
    {name: "b",  age: 18}
    {name: "b",  age: 19}];

我希望输出是

names_array_new = 
    {name: "a",  age: 17},
    {name: "b",  age: 19}];

我已经搜索了这个,但只发现如何删除重复时,整个对象是相同的。

应该这样做:

names_array = [
    {name: "a",  age: 15},
    {name: "a",  age: 16},
    {name: "a",  age: 17},
    {name: "b",  age: 18},
    {name: "b",  age: 19}];
function hash(o){
    return o.name;
}    
var hashesFound = {};
names_array.forEach(function(o){
    hashesFound[hash(o)] = o;
})
var results = Object.keys(hashesFound).map(function(k){
    return hashesFound[k];
})

hash函数决定哪些对象是重复的,hashesFound对象将每个哈希值与产生该哈希值的最新对象一起存储,results数组包含匹配的对象。

一个稍微不同的方法:

var names_array = [
    { name: "a", age: 15 },
    { name: "a", age: 16 },
    { name: "a", age: 17 },
    { name: "b", age: 18 },
    { name: "b", age: 19 }
];
var names_array_new = names_array.reduceRight(function (r, a) {
    r.some(function (b) { return a.name === b.name; }) || r.push(a);
    return r;
}, []);
document.getElementById('out').innerHTML = JSON.stringify(names_array_new, 0, 4);
<pre id="out"></pre>

var names_array = [
{name: "a", age: 15},
{name: "a", age: 16},
{name: "a", age: 17},
{name: "b", age: 18},
{name: "b", age: 19}];
function removeDuplicate(arr, prop) {
var new_arr = [];
var lookup = {};
for (var i in arr) {
    lookup[arr[i][prop]] = arr[i];
}
for (i in lookup) {
    new_arr.push(lookup[i]);
}
return new_arr;}
var newArray = removeDuplicate(names_array, 'name');
console.log("Result "+newArray);

Array.from(new Set(brand. name))map(obj => JSON.stringify(obj)))). net)。map(item => JSON.parse(item))