根据 javascript 中的 id 删除对象

Deleting an object based on the id in javascript

这是 的后续,我在其中通过识别 parentActivityId 将对象推入数组。 现在我想删除基于它的对象 id.I 已经根据后续问题尝试了下面的代码但它不是 working.Can 谁能告诉我我在这里做错了什么?

function getParent(r, a) {
    return a.id === child.parentActivityId ? a : a.items.reduce(getParent, r);
}

var node = data.reduce(getParent, {});
'items' in node && node.items.splice(child,1);

您需要在父项数组中找到子节点的索引。应该像遍历父项的项目数组一样简单,直到您找到子 ID。

获得子节点的索引后,将其用作拼接函数中的第一个参数

请参阅下面的粗略示例(对于找不到父项或子项的情况,您需要添加错误检查代码等)

function getParent(r, a) {
    return a.id === child.parentActivityId ? a : a.items.reduce(getParent, r);
}

var node = data.reduce(getParent, {});

var theChildIndex = 0;

for (i = 0; i < node.items.length; i++) { 
   if (node.items[i].id == child.id)
   {
       theChildIndex = i;
       break;
   }
}

node.items.splice(theChildIndex,1);

此解决方案的特点是 Array.prototype.some() 以递归方式进行一些基本的错误处理。

数据取自

关键功能是找到所需节点和索引的回调。

var data = [{ id: 1, activityName: "Drilling", parentActivityId: 0, items: [{ id: 2, activityName: "Blasting", parentActivityId: 1, items: [{ id: 3, activityName: "Ann", parentActivityId: 2, items: [] }, { id: 4, activityName: "Ann", parentActivityId: 2, items: [] }] }, { id: 5, activityName: "Transport", parentActivityId: 1, items: [{ id: 6, activityName: "Daniel", parentActivityId: 5, items: [] }] }] }],
    id = 3,
    node;

function findNode(a, i, o) {
    if (a.id === id) {
        node = { array: o, index: i };
        return true;
    }
    return Array.isArray(a.items) && a.items.some(findNode);
}

data.some(findNode);
if (node && Array.isArray(node.array)) {
    node.array.splice(node.index, 1);
}
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');