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

如果数组中有两个具有相同值的JSON对象,那么我想将它们标记为重复 。 我想删除其中的一个。 同样,当有多个重复的时候,我只想保留最后一个对象(最新)。如果这是input:

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}]; 

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

这应该做到这一点:

 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);