Javascript 按最小对象值区分的对象数组

Javascript 按最小对象值区分的对象数组,javascript,arrays,distinct,Javascript,Arrays,Distinct,我有一个对象数组: [{Name: "Company 1", AddressName: "Address 1", Radius: "5000" }, {Name: "Company 1", AddressName: "Address 1", Radius: "2000" }, {Name: "Company 1", AddressName: "Address 1", Radius: "500" }, {Name: "Company 2", AddressName:

我有一个对象数组:

    [{Name: "Company 1", AddressName: "Address 1", Radius: "5000" },
    {Name: "Company 1", AddressName: "Address 1", Radius: "2000" },
    {Name: "Company 1", AddressName: "Address 1", Radius: "500" },
    {Name: "Company 2", AddressName: "Address 2", Radius: "500" },
    {Name: "Company 3", AddressName: "Address 3", Radius: "3000" },
    ...]
有些公司可能会出现在不同的半径,因此在阵列中会出现多次

我想要的是:如果阵列中多次出现具有相同名称和地址的公司,则应只保留一个半径最小的公司:

    [{Name: "Company 1", AddressName: "Address 1", Radius: "500" },
    {Name: "Company 2", AddressName: "Address 2", Radius: "500" },
    {Name: "Company 3", AddressName: "Address 3", Radius: "3000" },
    ...]
常数arr=[ {名称:公司1,地址名称:地址1,半径:5000}, {名称:公司1,地址名称:地址1,半径:2000}, {名称:公司1,地址名称:地址1,半径:500}, {名称:公司2,地址名称:地址2,半径:500}, {名称:公司3,地址名称:地址3,半径:3000}, ]; 常数res=arr.sorta,b=>+a.Radius-+b.Radius .filtera,i=>arr.findIndexb=>a.Name==b.Name&&a.AddressName==b.AddressName==i;
console.logres 不预先排序的解决方案

基本上,您需要按名称分组,并通过最小化每个组的半径来进行额外过滤

此方法尝试查找同一组的索引,如果未找到索引==-1,则将实际对象推送到结果集

否则,如果存储对象的半径数值大于实际对象,则结果集中的对象将替换为实际对象

var数据=[{名称:公司1,地址名称:地址1,Radius:5000},{名称:公司1,地址名称:地址1,Radius:2000},{名称:公司1,地址名称:地址1,Radius:500},{名称:公司2,地址名称:地址2,Radius:500},{名称:公司3,地址名称:地址3,Radius:3000}], 结果=data.reducer,o=>{ var index=r.findIndexq=>q.Name==o.Name; 如果索引==-1 r.pusho; 否则,如果+r[index]。半径>+o。半径r[index]=o; 返回r; }, []; console.logresult;
.作为控制台包装{最大高度:100%!重要;顶部:0;}灵感来自@ponury kostek

// this will return object
    var c = test.sort((a,b) => +b.Radius - +a.Radius).reduce((a,d)=>{
      a[`${d.Name}:${d.AddressName}`] =  d;
      return a;
    },{});

// this will convert to array of objects
    var res = Object.keys(c).reduce((a,d)=>{
      a.push(c[`${d}`]);
      return a;
    },[]);

伟大的你有一些代码吗?你试过了吗?你试过reduce吗?@NinaScholz,我在JS方面是个新手,所以我只试过使用比较的循环