javascript - 如何从数组中删除对象
问题描述
最初我有这个json,我需要留下“名称”:[]只有那些名称不重复的对象
{
"type": "city",
"names": [
{
"name": "Citi1",
"index": 0,
"names": [
0,
1,
4
]
},
{
"name": "Citi1",
"index": 1,
"names": [
0,
1,
4
]
},
{
"name": "Citi2",
"index": 2,
"names": [
2,
3
]
},
{
"name": "Citi1",
"index": 4,
"names": [
0,
1,
4
]
}
]
如何从具有重复“名称”的 ["names"] 数组中删除对象?
例如,我需要删除 citi1 重复的对象,只留下其中 1 个预期对象
{
"type": "city",
"names": [
{
"name": "Citi1",
"index": 0,
"names": [
0,
1,
4
]
},
{
"name": "Citi2",
"index": 2,
"names": [
2,
3
]
},
]
我试过的代码
for(let i = 0; i < queueTypes.length; i++){
queueTypes[i]["names"].forEach( function (item, index) {
let tmpIndex = index;
for(let j = 0; j < queueTypes[i]["names"].length; j++){
if(queueTypes[i]["names"][j].name == item.name){
if( tmpIndex != j ){
delete queueTypes[i]["names"][j]
}
}
}
});
}
试图遍历这个数组并检查名称是否相同,但索引与我正在检查的元素不匹配
解决方案
name
要根据数组中的键过滤重复对象names
,您可以存储唯一名称的映射并过滤掉映射中已有的任何名称。
const myData = {
"type": "city",
"names": [
{
"name": "Citi1",
"index": 0,
"names": [
0,
1,
4
]
},
{
"name": "Citi1",
"index": 1,
"names": [
0,
1,
4
]
},
{
"name": "Citi2",
"index": 2,
"names": [
2,
3
]
},
{
"name": "Citi1",
"index": 4,
"names": [
0,
1,
4
]
}
]
};
const transform = data => {
const unique = {};
return {
...data,
names: data.names.filter(({ name }) => {
if (unique[name]) {
return false;
} else {
unique[name] = true;
return true;
}
})
};
};
console.log(transform(myData));
推荐阅读
- r - 按每个组中的子组汇总(&group by)
- configuration - 无法通过 LuCI 或 SSH 访问 OpenWrt
- javascript - 检查是否所有必填字段都填写在特定的 div 中
- java - spring mvc中不同的@ModelAttribute
- android - 如何将我的 XML 文件保存到特定文件夹?
- reactjs - 如何在 React Hooks 中使用 Antd 进行搜索
- amazon-web-services - Glue 是否需要安全配置才能从加密存储桶运行 Athena 查询?
- php - 存储来自多个输入字段的数组值 - Laravel
- .htaccess - htaccess - 重定向所有 PDF 文件,不包括指定文件夹中的 PDF
- android - Android导航组件从homefragment关闭应用程序