title: Change deeply nested property on object, but with arrays mixed in
body: <p>I'm trying to change the <code>title</code> and <code>description</code> properties on an individual task without mutating the state. The nesting is complex</p>
  <pre><code>dayColumns: [
            {
              id: 'monday',
              tasks: [{
                    key: cellTime,
                    dayOfWeek: columnDay,
                    date: date,
                    timeStart: cellTime,
                    timeEnd: cellTime + blockInterval * 60000,
                    initalBlockSize: blockInterval,
                    title: '',
                    description: '',
                  }, 
                  {
                    key: cellTime,
                    dayOfWeek: columnDay,
                    date: date,
                    timeStart: cellTime,
                    timeEnd: cellTime + blockInterval * 60000,
                    initalBlockSize: blockInterval,
                    title: '',
                    description: '',
                  }],
            },
            {
              id: 'tuesday',
              tasks: [],
            },
            {
              id: 'wednesday',
              tasks: [],
            },
            {
              id: 'thursday',
              tasks: [],
            },
            {
              id: 'friday',
              tasks: [],
            },
            {
              id: 'saturday',
              tasks: [],
            },
            {
              id: 'sunday',
              tasks: [],
            },
          ];
  </code></pre>
  <p>This is the function I have so far. I have adjusted this many times and I think my errors are with the returns.</p>
  <pre><code>case SET_TASK_TEXT:
        const { textType, newText, key, dayOfWeek } = action.payload;
        const newTextDayColumns = state.dayColumns.map((column) =&gt; {
          if (column.id === dayOfWeek) {
            const newTasks = column.tasks.map(
              (task) =&gt; {
                if (task.key === key &amp;&amp; textType === 'title') {
                  return { ...task, title: newText };
                }
                if (task.key === key &amp;&amp; textType === 'description') {
                  return { ...task, description: newText };
                }
              }
              /** Change title or description according to @param textType */
            );
            return [...column.tasks, newTasks];
          }
          return {...state.dayColumns, newTextDayColumns}
        });
        return {
          ...state,
          dayColumns: newTextDayColumns,
        };
  </code></pre>