从哈希数组中筛选重复哈希-Javascript

从哈希数组中筛选重复哈希-Javascript,javascript,arrays,hash,Javascript,Arrays,Hash,我有一个哈希数组,如下所示: [{id: "4bf58dd8d48988d110941735", name: "italy"}, {id: "4bf58dd8d48988d1c6941735", name: "skandi"}, {id: "4bf58dd8d48988d147941735", name: "diner"}, {id: "4bf58dd8d48988d110941735", name: "italy"}, {id: "4bf58dd8d48988d1c4941735",

我有一个哈希数组,如下所示:

[{id: "4bf58dd8d48988d110941735", name: "italy"},
 {id: "4bf58dd8d48988d1c6941735", name: "skandi"},
 {id: "4bf58dd8d48988d147941735", name: "diner"},
 {id: "4bf58dd8d48988d110941735", name: "italy"},
 {id: "4bf58dd8d48988d1c4941735", name: "resto"},
 {id: "4bf58dd8d48988d14a941735", name: "vietnam"},
 {id: "4bf58dd8d48988d1ce941735", name: "fish"},
 {id: "4bf58dd8d48988d1c4941735", name: "resto"},
 {id: "4bf58dd8d48988d1c4941735", name: "resto"}]
我想扔掉重复的散列。集合不起作用,因为哈希是唯一的对象

我觉得自己被卡住了,需要好好想想。请告知

试试这个

h.filter(( t={}, a=>!(t[a.id]=a.id in t) ))
以h表示的输入数组,时间复杂度O(n),说明

让h=[{id:“4bf58dd8d48988d110941735”,名称:“意大利”},
{id:“4bf58dd8d48988d1c6941735”,名称:“skandi”},
{id:“4bf58dd8d48988d147941735”,名称:“就餐者”},
{id:“4bf58dd8d48988d110941735”,名称:“意大利”},
{id:“4bf58dd8d48988d1c4941735”,名称:“resto”},
{id:“4bf58dd8d48988d14a941735”,名称:“越南”},
{id:“4bf58dd8d48988d1ce941735”,名称:“鱼”},
{id:“4bf58dd8d48988d1c4941735”,名称:“resto”},
{id:“4bf58dd8d48988d1c4941735”,名称:“resto”}]
让t;//声明t以避免使用global(但是没有它也可以工作)
设r=h.filter((t={},a=>!(t[a.id]=t中的a.id)))

log(JSON.stringify(r))我建议使用关联数组,这样可以更容易地删除重复项。如果可以,首先应该将数组构建为关联数组,这样就不必转换它。以下是您的操作方法:

var数组=[{
id:“4bf58dd8d48988d110941735”,
名称:“意大利”
},
{
id:“4bf58dd8d48988d1c6941735”,
姓名:“skandi”
}, {
id:“4bf58dd8d48988d147941735”,
姓名:“用餐者”
}, {
id:“4bf58dd8d48988d110941735”,
名称:“意大利”
}, {
id:“4bf58dd8d48988d1c4941735”,
名称:“resto”
}, {
id:“4bf58dd8d48988d14a941735”,
名称:“越南”
}, {
id:“4bf58dd8d48988d14a941735”,
名称:“鱼”
}, {
id:“4bf58dd8d48988d1c4941735”,
名称:“resto”
}, {
id:“4bf58dd8d48988d1c4941735”,
名称:“resto”
}
];
//您可以使用arrayAssociative[id]访问数组,其中id是真实id,如“4bf58dd8d48988d110941735”
var ArrayaSociative={};
用于(数组中的项){
//首先获取唯一id的
var addedNode=arrayasociative[array[item].id]=arrayasociative[array[item].id]| |{};
if(addedNode.names==null)
addedNode.names={};
//现在获取唯一的名称
var addedName=arrayAssociative[array[item].id]。名称[array[item].name]=arrayAssociative[array[item].id]。名称[array[item].\124;{};
}
console.log(arrayasocial)时间的空间

让arr=[
{id:'4bf58dd8d48988d110941735',名称:'italy'},
{id:'4bf58dd8d48988d1c6941735',名称:'skandi'},
{id:'4bf58dd8d48988d147941735',名称:'diner'},
{id:'4bf58dd8d48988d110941735',名称:'italy'},
{id:'4bf58dd8d48988d1c4941735',名称:'resto'},
{id:'4bf58dd8d48988d14a941735',名称:'vietnam'},
{id:'4bf58dd8d48988d1ce941735',名称:'fish'},
{id:'4bf58dd8d48988d1c4941735',名称:'resto'},
{id:'4bf58dd8d48988d1c4941735',名称:'resto'}
]
设map={};
让rest=arr.filter((项目)=>{
if(映射[项目id]==无效0){
map[item.id]=item.id;
返回true;
}
});
map=null;
控制台日志(rest)您也可以使用

//我给每个对象添加了逗号
const data=[{id:“4bf58dd8d48988d110941735”,名称:“意大利”},
{id:“4bf58dd8d48988d1c6941735”,名称:“skandi”},
{id:“4bf58dd8d48988d147941735”,名称:“就餐者”},
{id:“4bf58dd8d48988d110941735”,名称:“意大利”},
{id:“4bf58dd8d48988d1c4941735”,名称:“resto”},
{id:“4bf58dd8d48988d14a941735”,名称:“越南”},
{id:“4bf58dd8d48988d1ce941735”,名称:“鱼”},
{id:“4bf58dd8d48988d1c4941735”,名称:“resto”},
{id:“4bf58dd8d48988d1c4941735”,名称:“resto”}]
const result=data.reduce((当前,下一个)=>{
如果(!current.some(a=>a.name==next.name)){
当前推送(下一步);
}
回流;
},[])

控制台日志(结果)使用id作为键将数组缩减为一个对象,然后使用
object.values()
将数组转换回数组。您尝试了什么?您必须在数组中循环查找每个可能的散列,然后检查、删除。或者更改数据格式,使用一个具有哈希字符串的对象作为键,名称和其他任何内容作为单独的对象,仅允许使用纯JS值?@最后面,是的,这是我的react app
arrayAssociative[array[item].id]|{}的一部分
如果该行不是null/undefined/0/false,则该行在
| |
左侧给出值,如果该行不是null/undefined/0/false,则该行在右侧给出值-