immer. js объединить вложенный объект - PullRequest
0 голосов
/ 22 марта 2020

Я хотел бы объединить вложенный объект с помощью immer. js

Всегда было трудно объединить два вложенных объекта.
Интересно, возможно ли следующее с какой-либо библиотекой ...

state = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'foo1',
      lv3_2: 'foo2',
    },
    lv2_2: {
      lv3_2: 'foo2'
    }
  },
  lv1_2: {
    lv2_1: 'foo'
  }
}



lv1_1 = {
  lv2_1: {
    lv3_1: 'bar'
  }
}

объединение lv1_1 с состоянием, я хочу следующий вывод.

state = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'bar',
      lv3_2: 'foo2',
    },
    lv2_2: {
      lv3_2: 'foo2'
    }
  },
  lv1_2: {
    lv2_1: 'foo'
  }

}

Я пытался погружать. js, но следующий код draft.lv1_1 = {...draft.lv1_1, ...lv1_1}, кажется, дает

state = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'bar'
    }
  }
}

1 Ответ

0 голосов
/ 22 марта 2020

Интересно, возможно ли следующее с какой-либо библиотекой ..

Вы можете попробовать lodash.merge:

const a = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'foo1',
      lv3_2: 'foo2'
    },
    lv2_2: {
      lv3_2: 'foo2'
    }
  },
  lv1_2: {
    lv2_1: 'foo'
  }
};

const b = {
  lv1_1: {
    lv2_1: {
      lv3_1: 'bar'
    }
  }
};
console.log(_.merge(a, b));
...