角度滤镜嵌套数组

时间:2018-09-16 15:42:27

标签: arrays angular angular5

您好,我正在AngualarJS 5中开发Web应用程序。我有一个数组,我正在尝试根据收到的输入更新同一数组。下面是我的数组。

[
 {
  checked:false,
  id:1109376510842,
  name:"info model",
  children:
  [
   {
     checked:false,
     id:5763308644187,
     name:'Configmodel'
   },
   {
     checked:false,
     id:5763308655187,
     name:'Devicemodel'
   }
  ]
 },
 {
  checked:false,
  id:1109376580842,
  name:"data access",
  children:
  [
   {
     checked:false,
     id:57633458644187,
     name:'Configmodel'
   },
   {
     checked:false,
     id:57633084555187,
     name:'Devicemodel'
   }
  ]
 }
]

我还有一个输入数组,它给出的细节很少。基于该数组,我想更新我的父数组。我的输入对象提供了以下详细信息。

{
  parent: info model,
  data:{
  checked:true,
  id:5763308644187,
  name:'Configmodel'
  }
}

因此,基于上述对象,我想更新我的父对象。我的对象包含父对象,这指示必须更新父数组中的哪个对象。对象还包含内部检查的子代。现在它是真的,所以我想更新父表的信息模型中的子项。 我尝试如下。

 if (node.hasChildren) {
                let copyCreate = Object.assign({}, node.data);
                copyCreate.checked = cb.checked;
                const targetIdx = this.createnode.map(item => item.name).indexOf(copyCreate.name);
                this.createnode[targetIdx] = copyCreate;
                }
                else {
                    let copyCreate = Object.assign({}, node.data);
                    copyCreate.checked = cb.checked;
                    const parent = this.createnode.find(e => e.name === node.parent.data.name);
                    if (parent) {
                        const child = parent.children.find(e => e.id === node.data.id);
                        if (child) {
                            child.checked = copyCreate.checked;
                        } else {
                            parent.children.push(copyCreate);
                        }
                    }
                }

有人可以帮我解决这个问题吗?谢谢

1 个答案:

答案 0 :(得分:0)

我希望我能正确理解你。您可以在服务程序组件中执行以下操作:

updateObject(fullDataArray, updateObj) {
    // Find the parent 
    const parent = fullDataArray.find(e => e.name === updateObj.parent);

    // If the parent is set, search for the respective child entry
    if (parent) {
        const child = parent.children.find(e => e.id === updateObj.data.id);

        if (child) {
            // Updates the childs checked attribute
            child.checked = updateObj.data.checked;
        } else {
            // Add child if not exist
            parent.children.push(updateObj.data);
        }
    }

}