Использование Object.assign и более эффективное распространение объектов - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь добиться следующего: скажем, у меня есть такой объект:

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;
      }

IЯ уверен, что есть гораздо более чистый способ сделать это, используя Object.assign или распространение объекта.

Пожалуйста, посоветуйте, какой подход лучше.

1 Ответ

0 голосов
/ 11 мая 2018

Может быть, вы ищете

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,
     },
  };
}
...