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方面是个新手,所以我只试过使用比较的循环