Javascript 如何检查对象数组是否具有重复的属性值​;然后得到重复的最后一个值?

Javascript 如何检查对象数组是否具有重复的属性值​;然后得到重复的最后一个值?,javascript,arrays,Javascript,Arrays,我想浏览一个数组,检查元素是否重复,然后恢复最后一个元素 const tabs = [ { name: 'john', details:"john1" }, { name: 'michael' , details:"michael1" }, { name: 'beris' , details:"beris1" }, { name: 'john' , details:"john2"}, { name: 'john' , details:"john3"}, { name:

我想浏览一个数组,检查元素是否重复,然后恢复最后一个元素

const tabs = [
  { name: 'john', details:"john1" },
  { name: 'michael' , details:"michael1" },
  { name: 'beris' , details:"beris1" },
  { name: 'john'  , details:"john2"},
  { name: 'john'  , details:"john3"},
  { name: 'beris' , details:"beris2" },
   { name: 'beris' , details:"beris3" },
]
我希望有这样的结果

const tabs = [
   { name: 'john'  , details:"john3"},
    { name: 'beris' , details:"beris3" },
]

你可以试试下面的方法

var map = {}
tabs.forEach(item => map[item.name] = item)
const result = Object.values(map)

你可以试试下面的方法

var map = {}
tabs.forEach(item => map[item.name] = item)
const result = Object.values(map)
const选项卡=[
{姓名:'john',详情:'john1'},
{姓名:'michael',详情:'michael1},
{名称:'beris',详情:'beris1},
{姓名:'john',详情:'john2'},
{姓名:'john',详细信息:'john3'},
{名称:'beris',详情:'beris2},
{名称:'beris',详细信息:'beris3'},
];
//创建仅具有最新副本的newTabs数组的逻辑
让名称=[];
设newTabs=[];
tabs.forEach((元素)=>{
if(name.includes(element.name)){
newTabs=newTabs.过滤器(功能(obj){
返回obj.name!==element.name;
});
推力(元件);
}否则{
name.push(element.name);
}
});
//输出只有最新重复对象的newTabs数组!
控制台日志(newTabs)
const选项卡=[
{姓名:'john',详情:'john1'},
{姓名:'michael',详情:'michael1},
{名称:'beris',详情:'beris1},
{姓名:'john',详情:'john2'},
{姓名:'john',详细信息:'john3'},
{名称:'beris',详情:'beris2},
{名称:'beris',详细信息:'beris3'},
];
//创建仅具有最新副本的newTabs数组的逻辑
让名称=[];
设newTabs=[];
tabs.forEach((元素)=>{
if(name.includes(element.name)){
newTabs=newTabs.过滤器(功能(obj){
返回obj.name!==element.name;
});
推力(元件);
}否则{
name.push(element.name);
}
});
//输出只有最新重复对象的newTabs数组!

控制台日志(newTabs)
您可以使用
映射将具有相同
名称
的对象分组到一个数组中,其中数组的键是它存储的对象的
名称
。然后,您可以使用
Array.from()
将映射中的值转换为数组,然后可以对该数组进行过滤,以仅包含引用大于1的数组。对于每个数组,您可以
.map()
使用它来获取最后一个元素:

const tabs=[{name:'john',details:'john1},{name:'michael1},{name:'beris',details:'beris1},{name:'john',details:'john2},{name:'john',details:'john3},{name:'beris',details:'beris2},{name:'beris',details:'beris3};
const res=数组。from(制表符)reduce((m,o)=>
m、 set(o.name,(m.get(o.name)| |[])concat(o))
.filter(({length})=>length>1.Map(vals=>vals.pop());

控制台日志(res)
您可以使用
映射将具有相同
名称
的对象分组到一个数组中,其中数组的键是它存储的对象的
名称
。然后,您可以使用
Array.from()
将映射中的值转换为数组,然后可以对该数组进行过滤,以仅包含引用大于1的数组。对于每个数组,您可以
.map()
使用它来获取最后一个元素:

const tabs=[{name:'john',details:'john1},{name:'michael1},{name:'beris',details:'beris1},{name:'john',details:'john2},{name:'john',details:'john3},{name:'beris',details:'beris2},{name:'beris',details:'beris3};
const res=数组。from(制表符)reduce((m,o)=>
m、 set(o.name,(m.get(o.name)| |[])concat(o))
.filter(({length})=>length>1.Map(vals=>vals.pop());

控制台日志(res)您可以按名称对项目进行分组,如果组的最后一个元素长度超过2,则选择该元素

const lkp=tabs.reduce((acc,cur)=>{
acc[当前名称]=acc[当前名称]| |[];
acc[当前名称].推送(当前);
返回acc;
}, {});
常量筛选=对象值(lkp).reduce((acc,cur)=>{
如果(cur.length>1)acc.push(cur.pop());
返回acc;
}, [])
console.log(已过滤)

常量选项卡=[
{姓名:'john',详情:'john1'},
{姓名:'michael',详情:'michael1},
{名称:'beris',详情:'beris1},
{姓名:'john',详情:'john2'},
{姓名:'john',详细信息:'john3'},
{名称:'beris',详情:'beris2},
{名称:'beris',详细信息:'beris3'},
]

您可以按名称对项目进行分组,如果组中的最后一个元素长度超过2,则选择该元素

const lkp=tabs.reduce((acc,cur)=>{
acc[当前名称]=acc[当前名称]| |[];
acc[当前名称].推送(当前);
返回acc;
}, {});
常量筛选=对象值(lkp).reduce((acc,cur)=>{
如果(cur.length>1)acc.push(cur.pop());
返回acc;
}, [])
console.log(已过滤)

常量选项卡=[
{姓名:'john',详情:'john1'},
{姓名:'michael',详情:'michael1},
{名称:'beris',详情:'beris1},
{姓名:'john',详情:'john2'},
{姓名:'john',详细信息:'john3'},
{名称:'beris',详情:'beris2},
{名称:'beris',详细信息:'beris3'},
]

到目前为止,您尝试了什么?提示:地图/字典会很有帮助。为什么结果中没有
michael
?因为它没有重复?@Kaddath是的,michael没有重复你到目前为止尝试过什么?提示:地图/字典会很有帮助。为什么结果中没有
michael
?因为它不重复?@Kaddath yes michael不重复它返回一个不重复的元素(michael)。它返回一个不重复的元素(michael)。它也适用于该方法,但我还没有阅读reduce()方法,谢谢。它也适用于该方法,但我还没有阅读reduce()方法,谢谢。