代码之家  ›  专栏  ›  技术社区  ›  dwjohnston

如何用扩展语法创建或替换对嵌套对象的编辑?

  •  1
  • dwjohnston  · 技术社区  · 6 年前

    let a = {1: "one", 2: "two"}; 
    let b= {...a, ...{2: "too", 3: "three"}}
    console.log(b); //{1: "one", 2: "too", 3: "three"}

    我想做的是类似的事情,但是在嵌套对象上:

    let a = {
       title: "hello world", 
       nestedObject: {
          1: "one", 
          2: "two", 
       }
    }; 
    
    let b= {...a, ...{nestedObject: {2: "too", 3: "three"}}};
    console.log(b); //Replaces the nested object entirely. 

    {
       title: "hello world", 
       nestedObject: {
          1: "one", 
          2: "too",
          3: "three" 
       }
    }; 
    

    2 回复  |  直到 6 年前
        1
  •  3
  •   Meligy    6 年前

    我经常在Redux reducer中使用这种模式。我就是这样做的:

    let a = {
       title: "hello world", 
       nestedObject: {
          1: "one", 
          2: "two", 
       }
    }; 
    
    let b = {
        ...a,
        nestedObject: {
            ...a.nestedObject, 
            2: "too",
            3: "three"
        }
    };
    console.log(b); //Replaces the nested object entirely. 
    

    注意,我现在使用 nestedObject ...a.nestedObject .

    • a
    • 覆盖 嵌套对象 用一个新对象(因为它在 ...a
    • 在新对象中,添加 a.nestedObject
    • 然后在中添加(并覆盖任何现有的)道具 嵌套对象 靠着后面的道具 …嵌套对象

    如果您正在寻找某种可以在任何级别自动覆盖任何属性的东西,那么有几个轻NPM包,如 deep-assign . 它的工作原理与 assign

        2
  •  1
  •   Prasanna    6 年前

    使用原始对象中的嵌套对象。只会把财产分散开来

    let a = {
       title: "hello world", 
       nestedObject: {
          1: "one", 
          2: "two", 
       }
    }; 
    
    let b= {...a, nestedObject: {...a.nestedObject, ...{2: "too", 3: "three"}}};
    console.log(b); //Will not Replace the nested object entirely.