javascript - 比较对象数组并删除特定项目
问题描述
arr1 = [
{
name: "will",
value: "1"
},
{
name: "nelson",
value: "3"
}
];
和
arr2 = [
{
name: "will",
value: 1,
submenu: [
{
name: "ralph",
value: 2
}
]
}
]
然后从第二个数组中删除 ralph。我已经创建了一个执行此操作的函数,但只检查第一个元素而不验证子菜单。
comparador(arrSecundario) {
return (arrAtual) => {
return arrSecundario.filter(function (other) {
return other.value === arrAtual.value;
}).length !== 0;
};
}
this.arr2.filter(this.comparador(this.arr1));
解决方案
过滤后需要映射数组。您可以这样做,也可以添加“prop === 'submenu'” 来专门检查子菜单内部数组。
var arr1 = [
{
name: "will",
value: "1"
},
{
name: "nelson",
value: "3"
}
];
var arr2 = [
{
name: "will",
value: 1,
submenu: [
{
name: "ralph",
value: 2
},
// {
// name: "nelson",
// value: 3
// }
]
}
];
function filterComparador(arrSecundario) {
return (arrAtual) => {
return arrSecundario.filter((other) => {
return other.value == arrAtual.value;
}).length != 0;
};
}
function mapComparador(arrSecundario) {
return (arrAtual) => {
Object.keys(arrAtual).forEach((prop) => {
if (Array.isArray(arrAtual[prop])) {
let propValue = arrAtual[prop].filter(this.filterComparador(arrSecundario));
if (propValue.length > 0) {
arrAtual[prop] = propValue.map(this.mapComparador(this.arrSecundario));
} else {
delete arrAtual[prop];
}
}
});
return arrAtual;
};
}
var manipulatedArray = this.arr2.filter(this.filterComparador(this.arr1))
.map(this.mapComparador(this.arr1));
console.log(manipulatedArray);
推荐阅读
- c# - 参数对 saveFileDialog 无效
- google-cloud-dataproc - 使用 google-cloud-python API 访问 Dataproc 时出现无效区域错误
- sql - SQL Anywhere:尝试使用连接删除子查询的结果时出错
- java - 我需要从输入中取出前 N 个字符
- sql-server - Oracle 18 XE HS MSSQL LINUX 连接问题
- iis - applicationHost.config 中的 configSource 有什么替代方法吗?
- microservices - 微服务之间的依赖问题
- python - Python 3 BS4 - 从标签中提取数据(续)
- ruby-on-rails - 重用 ActiveAdmin 组件
- rest - 使用 TemplateHTMLRenderer 时模板上下文来自哪里