使用 Object.assign 并更有效地传播对象

Using Object.assign and object spread more efficiently

我正在努力实现以下目标: 假设我有一个这样的对象:

myObj = {
   john: {1: ['a', 'b',..], 2: ['aa', 'vv',...],
   tom: {1: ['ab', 'bb',..], 2: ['aa', 'vv',...],
}

为了实现上述目标,我正在做类似的事情

    function (name, myNum, myList) {
        let myObj = Object.assign({}, state);
        // name and myNum and myList values are passed in for this eg i am 
       // hardcoding
       let name = 'jon';
       let myNum = 1;
       let mylist = [1,2,3];
       // I want to replace the if / else with a more elegant solution
       if (myObj.hasOwnProperty(name)) {
         myObj[name][myNum] = myList;
       } else {
         myObj[name] = {[myNum]: myList};
       }
       return myObj;
      }

我相信有更简洁的方法可以做到这一点,使用 Object.assign 或对象传播。

请指教更好的方法。

也许您正在寻找

myObj[name] = Object.assign(myObj[name] || {}, {[myNum]: myList});

你也可以

myObj[name] = {...myObj[name], [myNum]: myList};

但这总是会创建一个新对象。

您也可以将所有内容组合成一个表达式:

function (name, myNum, myList) {
  return {
    ...state,
    [name]: {
      ...state[name],
      [myNum]: myList,
     },
  };
}