在现有对象中添加对象的Javascript

在现有对象中添加对象的Javascript,javascript,object,Javascript,Object,我希望用户可以选择添加更多的步骤类型、步骤代码和属性。他可以添加具有现有StepType或不同StepType的stepCode,因此,对象类似于此: 看到了吗?在名为“指南”的步骤类型中,我有两个步骤代码(G019、G040)。在名为“成功”的步骤类型中,我只有一个步骤(S003),以此类推。由于我对js甚至对象都是新手,我希望你们能帮助我创建一个函数,检查stepType是否已经存在,然后向它添加另一个stepCode(及其属性)。如果它还不存在,我希望这个函数创建这个新的stepType

我希望用户可以选择添加更多的步骤类型、步骤代码和属性。他可以添加具有现有StepType或不同StepType的stepCode,因此,对象类似于此:

看到了吗?在名为“指南”的步骤类型中,我有两个步骤代码(G019、G040)。在名为“成功”的步骤类型中,我只有一个步骤(S003),以此类推。由于我对js甚至对象都是新手,我希望你们能帮助我创建一个函数,检查stepType是否已经存在,然后向它添加另一个stepCode(及其属性)。如果它还不存在,我希望这个函数创建这个新的stepType,带有stepCode及其属性

目前,我的代码如下所示:

 const checkStep = () => {
    if (!Object.keys(procedures).length) {
      let proc = 
        {[key]:
          {
            [stepType]: {
              [stepCode]: {
                [language]: stepText,
                timeout,
                nextInstruction,
              }
            }
          }
        }
      setProcedures(proc)
    }
    else{
      Object.entries(procedures).forEach((p, k) =>{
        ...
      })
    }
  }
每次用户单击“添加另一个步骤”按钮时,我都调用此函数。第一部分检查对象是否已经存在,如果不存在,则使用其键创建对象,依此类推(此部分正在工作)。我不知道怎么做的是另一部分。我认为我们必须检查stepType是否已经存在于名为procedures的对象中,但我不知道如何做。我也不知道如何将stepCode和属性放入现有对象(过程)中。也许我创建了一个变量,并喜欢:setProcedures(…procedures,variable)。我不想丢失程序中的内容,只是想按照我向您解释的方式添加更多内容

注意:所有变量(stepType、stepCode、language、stepText、timeout、nextInstruction)都是useState。当用户在输入文本字段中写入任何内容时,我使用e.target.value设置特定变量


谢谢。

您可以在每个键上执行循环,如果匹配,则添加到现有数据或创建新的stepType并添加

var newStepType = "test", stepCode="test1", language ="en", stepText="hello", timeout=9, nextInstruction="new ins";
    Object.keys(procedure.DOF0014).forEach(key => { 
//if newStepType matches insert stepCode. eg: stepType is "guide"
        if(key === newStepType) { 
            procedure.DOF0014[key] = { ...procedure.DOF0014[key], ...{[stepCode]: {[language]: stepText,timeout,nextInstruction}}}
        }else{
            procedure.DOF0014 = {...procedure.DOF0014, ...{[newStepType]:{[stepCode]: {[language]: stepText,timeout,nextInstruction}}}};
        }
    });
试试这个。我没有测试代码。但我希望它能起作用。我正在分享如何做的想法

Object.keys(procedure).forEach(codes => {
  Object.keys(procedure[codes]).forEach(key => { 
            if(key === newStepType) { 
                procedure[codes][key] = { ...procedure[codes][key], ...{[stepCode]: {[language]: stepText,timeout,nextInstruction}}}
            }else{
                procedure[codes] = {...procedure[codes], ...{[newStepType]:{[stepCode]: {[language]: stepText,timeout,nextInstruction}}}};
            }
        });    
  })

我想做得更一般一些。我是说。。。不要使用DOF0014,而是使用key state的内容。然后,我不知道如何执行该过程。DOF0014[key]。我的意思是,我可以通过过程[key]更改过程。DOF0014