【发布时间】:2017-08-16 17:23:14
【问题描述】:
我有一个 id 列表
ids = [6,9]
和一个对象,它是一个对象数组
data = {
"child": [{
"fruit": "apple",
"id": 1
},
{
"fruit": "mango",
"id": 2,
"child": [{
"name": "js",
"id": 4
}, {
"name": "jsk",
"id": 6
}]
},
{
"fruit": "banana",
"id": 9
}
]
}
我必须遍历数据才能找到 id 列表中存在的任何具有 id 的对象。这里我必须删除
{"name":"jsk", "id": 6}
和
{"fruit":"banana","id":9}
为此,我编写了以下代码
deleteObj = (data, ids) => {
data.child.forEach((key, index) => {
if(key && ids.indexOf(child.id) > -1){
console.log("inside match before", key);
key.splice(index, 1);
console.log("inside match after: ", key);
}
if(key.child) {
deleteObj(key, ids);
}
})
};
但是在这个函数中,在获得第一个匹配后它只是简单地返回。删除只有第一个匹配的 id。
只发邮件inside match after:9
找不到任何错误
【问题讨论】:
-
什么是
findBookmarkDeletedIds -
deleteObj 中有两个问题。在第一个 if 语句中,您检查
child.id,但您应该检查key.id。其次,应该在data.child而不是key上调用您的拼接调用。
标签: javascript object recursion