在javascript中,从对象数组中删除重复属性对象的最佳方法是什么

在javascript中,从对象数组中删除重复属性对象的最佳方法是什么,javascript,arrays,object,Javascript,Arrays,Object,像ages这样的对象数组有5条记录,根据sno我们需要第一个元素 var ages=[ {name: "Jan", age: "90", sno: "1"}, {name: "Harry", age: "100", sno: "1"}, {name: "Tan", age: "10", sno: "2"}, {name: "Ron", age: "15", sno: "2"}, {name: "Roh", age: "19", sno: "2"}, ] 输出: [ {name: "Jan",

像ages这样的对象数组有5条记录,根据sno我们需要第一个元素

var ages=[
{name: "Jan", age: "90", sno: "1"},
{name: "Harry", age: "100", sno: "1"},
{name: "Tan", age: "10", sno: "2"},
{name: "Ron", age: "15", sno: "2"},
{name: "Roh", age: "19", sno: "2"},
]
输出:

[
{name: "Jan", age: "90", sno: "1"},
{name: "Tan", age: "10", sno: "2"},
]
我试图通过使用ES6JavaScript表达式来解决这个问题,方法是获取重复的sno,循环通过distinc sno并获取第一个元素。但我需要一个更好的方法

是否可以在不使用任何内置函数的情况下实现此功能?

与。每次迭代时,检查集合中是否存在sno。如果是,则返回false删除该项,如果不是添加到集合,则返回对集合的引用将强制转换为“true”

var ages=[{姓名:Jan,年龄:90,sno:1},{姓名:Harry,年龄:100,sno:1},{姓名:Tan,年龄:10,sno:2},{姓名:Ron,年龄:15,sno:2},{姓名:Roh,年龄:19,sno:2}] var result=ages.filterfunction{sno}{ 返回this.hassno?false:this.addsno },新一套 logresult您可以使用as闭包并只过滤未知的sno

var ages=[{姓名:Jan,年龄:90,sno:1},{姓名:Harry,年龄:100,sno:1},{姓名:Tan,年龄:10,sno:2},{姓名:Ron,年龄:15,sno:2},{姓名:Roh,年龄:19,sno:2}], filtered=ages.filters=>{sno}=>!s、 hassno&s.addsnonew Set;
console.logfiltered 但是,由于某些查找,reduce的性能不是很好:

常数=[ {姓名:Jan,年龄:90,sno:1}, {姓名:哈里,年龄:100,sno:1}, {姓名:谭,年龄:10,sno:2}, {姓名:Ron,年龄:15,sno:2}, {姓名:卢武铉,年龄:19,sno:2}, ]; const result=ages.reduceac,x=>{ 如果acc.somee=>e.sno==x.sno==false acc.pushx; 返回acc; }, []; console.logresult 晚会迟到了

var-mem; var结果=[]; 变量年龄=[ {姓名:Jan,年龄:90,sno:1} ,{姓名:哈里,年龄:100,sno:1} ,{姓名:谭,年龄:10,sno:2} ,{姓名:Ron,年龄:15,sno:2} ,{姓名:卢武铉,年龄:19岁,斯诺:2} ]; mem=年龄[0]; 结果:pushages[0];
对于var i=0;为什么不先解决这个问题呢?你丢失了CopaTa。使用Loasy:Read=.MaPy.GybyAs','Sn',0.请考虑添加你已经尝试过的可能的解决方案的代码示例。我知道,我曾经使用过数组方法,但是现在,我想,这应该为具有此绑定的对象保留。这有点滥用方法中的绑定回调,但由于可读性,它比闭包更可取。Hi Ori。谢谢你的回答。我们能在不使用任何内置javascript函数的情况下以最佳方式实现这一点吗?@Adam-请参阅添加的解决方案。我想检查密钥是否存在。我将该值设置为true以帮助我进行检查,但我也可以轻松地将该值设置为undefined,并使用。