【发布时间】:2018-07-16 05:07:52
【问题描述】:
此对象的关系为:childOne > childTwo > childThree > childFour > childFive > childSix。
{
"parentObj": {
"childOne": [
{
"name": "A",
"id": "1"
},
{
"name": "B",
"id": "2"
}
],
"childTwo": [
{
"name": "AB",
"parent_id": "1",
"id": "11"
},
{
"name": "DE",
"parent_id": "2",
"id": "22"
}
],
"childThree": [
{
"name": "ABC",
"parent_id": "22",
"id": "111"
},
{
"name": "DEF",
"parent_id": "11",
"id": "222"
}
],
"childFour": [
{
"name": "ABCD",
"parent_id": "111",
"id": "1111"
},
{
"name": "PQRS",
"parent_id": "111",
"id": "2222"
}
],
"childFive": [
{
"name": "FGRGF",
"parent_id": "1111",
"id": "11111"
},
{
"name": "ASLNJ",
"parent_id": "1111",
"id": "22222"
},
{
"name": "ASKJA",
"parent_id": "1111",
"id": "33333"
}
],
"childSix": [
{
"name": "SDKJBS",
"parent_id": "11111",
"id": "111111"
},
{
"name": "ASKLJB",
"parent_id": "11111",
"id": "222222"
}
]
}
}
有没有办法通过 ID 删除一个项目,并且与该特定 ID 关联的对象应该被删除(即,如果我这样做delete parentObj.childTwo[1],那么它下面的所有相关对象也应该被删除)。
手动循环是太糟糕的代码,并且会产生错误。必须有更好的方法来处理此类问题,例如递归或其他。
【问题讨论】:
-
简短回答:不,没有什么神奇的方法可以让它理解你的结构并递归删除对象。您需要编写代码(只需编写好并测试它 - 然后它就不会“错误”)
-
如果你手动定义这样的标题的父子顺序,而不是在数据结构中反映顺序,就不会有免费的午餐。您必须以一种或另一种方式使用此信息“
childOne > childTwo > childThree > childFour > childFive > childSix”。 -
@Mehdi 我将对象键作为方法的参数。它可以是任何级别。
-
那么,@S.Negi 你是说,parentObj.childOne 中的一个项目可能有一个像“childFive”这样的键,例如像“44444”这样的值?
-
删除功能是什么样的?
removeItem("childOne",obj.parentElement)?
标签: javascript arrays angularjs algorithm recursion