Javascript 在多维数组中搜索具有匹配值的对象
如何搜索多维数组中的值,然后删除找到该值的对象,下面的代码并不总是相同的,因此我需要一种方法来搜索所有数组,以找到具有特定值的对象 例如,如果我想删除一个id为8的对象,我如何在所有数组和对象中搜索id,然后删除该对象,下面是一个数据示例Javascript 在多维数组中搜索具有匹配值的对象,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,如何搜索多维数组中的值,然后删除找到该值的对象,下面的代码并不总是相同的,因此我需要一种方法来搜索所有数组,以找到具有特定值的对象 例如,如果我想删除一个id为8的对象,我如何在所有数组和对象中搜索id,然后删除该对象,下面是一个数据示例 { MenuLocation: 'Jersey', MenuItems: [ { id: '1', parentId: '1', position: 2, name: 'test1',
{
MenuLocation: 'Jersey',
MenuItems: [
{
id: '1',
parentId: '1',
position: 2,
name: 'test1',
link: 'http://google.com',
submenu: []
},
{
id: '2',
parentId: '2',
position: 1,
name: 'test2',
link: '#',
submenu: [
{
id: '3',
parentId: '2',
position: 1,
name: 'testsub1',
link: 'http://google.com',
submenu: []
},
{
id: '4',
parentId: '2',
position: 2,
name: 'testsub2',
link: 'http://google.com',
submenu: [
{
id: '5',
parentId: '4',
position: 1,
name: 'testsub4.1',
link: 'http://google.com',
submenu: []
},
{
id: '6',
parentId: '4',
position: 2,
name: 'testsub4.2',
link: 'http://google.com',
submenu: []
},
{
id: '7',
parentId: '4',
position: 3,
name: 'testsub4.3',
link: 'http://google.com',
submenu: [
{
id: '8',
parentId: '7',
position: 3,
name: 'testsub4.1',
link: 'http://google.com',
submenu: []
},
{
id: '9',
parentId: '7',
position: 2,
name: 'testsub4.2',
link: 'http://google.com',
submenu: []
},
{
id: '10',
parentId: '7',
position: 1,
name: 'testsub4.3',
link: 'http://google.com',
submenu: []
}
]
}
]
}
]
}
]
}
这是我到目前为止所做的,它相当混乱,但它可以工作,但我认为这不是最好的方法
delClick(id) {
for (var key in this.menu.MenuItems) {
var obj = this.menu.MenuItems[key];
if (obj.id == id) {
console.log('match');
} else {
if (obj.submenu.length > 0) {
for (var key in obj.submenu) {
var nextobj = obj.submenu[key];
if (nextobj.id == id) {
console.log('match');
console.log(nextobj);
} else {
for (var key in nextobj.submenu) {
var objn = nextobj.submenu[key]
if (objn.id == id) {
console.log('match');
console.log(objn);
}
}
}
}
}
}
}
}
}
我必须不断添加for循环,直到它检查所有内容,但我不知道将有多少数组和对象,克服这一问题的最佳方法是什么?这有点复杂,因为一旦删除项目,就需要更新它们的位置 一个简单但天真的方法是计算一个项目的平面列表,并将其转化为一个地图。通过父项ID获取父项,并根据其位置删除子项,然后更新子菜单中的位置
函数值(数据){
const obj=data.MenuItems | | data.submenu;
如果(对象类型&&typeof对象=='object'){
常量值=对象值(obj);
返回值.concat(values.map(toValues)).flat();
}
返回obj;
}
函数toLkp(数据){
返回到值(数据)。减少((acc,cur)=>{
acc[当前id]=当前;
返回acc;
}, {});
}
函数del(id、数据){
常数lkp=toLkp(数据);
const obj=lkp[id];
PAR= PAL= LKP[OB.PARTEND];
常量位置=对象位置;
Pal.子菜单。拼接(Obj.位置- 1, 1);
对于(PAR.子菜单的常数ITM){
如果(itm.position>pos)itm.position-=1;
}
返回数据;
}
console.log(JSON.stringify(data));
del(3,数据);
console.log(JSON.stringify(data))代码>
风险值数据={
菜单位置:'泽西',
菜单项:[{
id:'1',
parentId:'1',
职位:2,
名称:“test1”,
链接:'http://google.com',
子菜单:[]
},
{
id:'2',
parentId:'2',
职位:1,,
名称:“test2”,
链接:“#”,
子菜单:[{
id:'3',
parentId:'2',
职位:1,,
名称:“testsub1”,
链接:'http://google.com',
子菜单:[]
},
{
id:'4',
parentId:'2',
职位:2,
名称:“testsub2”,
链接:'http://google.com',
子菜单:[{
id:'5',
parentId:'4',
职位:1,,
名称:“testsub4.1”,
链接:'http://google.com',
子菜单:[]
},
{
id:'6',
parentId:'4',
职位:2,
名称:“testsub4.2”,
链接:'http://google.com',
子菜单:[]
},
{
id:'7',
parentId:'4',
职位:3,
名称:“testsub4.3”,
链接:'http://google.com',
子菜单:[{
id:'8',
parentId:'7',
职位:3,
名称:“testsub4.1”,
链接:'http://google.com',
子菜单:[]
},
{
id:'9',
parentId:'7',
职位:2,
名称:“testsub4.2”,
链接:'http://google.com',
子菜单:[]
},
{
id:'10',
parentId:'7',
职位:1,,
名称:“testsub4.3”,
链接:'http://google.com',
子菜单:[]
}
]
}
]
}
]
}
]
}
您需要向我们展示您的尝试,我们是来纠正您的,而不是为您做这项工作的。如果删除的对象有子对象,会发生什么情况?@jonatjano,那么它们都将被删除too@jonatjano很抱歉,我对javascript还很陌生,所以我想我在寻找一些指导,不要指望任何人为我做这一切你需要考虑所有可能的情况。例如,如果对象是一个数组或只是一个对象。例如:a={b:[c:{d},e:[],f:{},f:{….}等等。对于数组,使用object.keys()函数或foreach。类似地迭代对象等。