Удалить свойство из неизменяемого объекта JS - PullRequest
0 голосов
/ 10 октября 2018

В моем приложении-реактиве я хочу удалить свойство моего объекта js, которое находится в избыточном количестве.

вот мой код.

    case SAVE_PLAYLIST:
        const { toPlayListFrom, selectedPlaylist } = action.payload;

        let newPlaylists = // state.savedPlaylists;
            Object.keys(selectedPlaylist).length > 0
                ?  {
                    ...state.savedPlaylists,
                    [toPlayListFrom]: selectedPlaylist
                }
                : delete state.savedPlaylists[toPlayListFrom];

        return {
            ...state,
            savedPlaylists: newPlaylists
        }

в этой строке delete state.savedPlaylists[toPlayListFrom] не удаляет свойство должным образом.Как правильно удалить свойство из неизменяемого объекта js?

1 Ответ

0 голосов
/ 10 октября 2018

Ваше удаление утверждение неверно.Команда обычно возвращает истину (в некоторых случаях она может возвращать ложь.)

Кроме того, как упомянул TJ Crowder, вы не хотите изменять переменную state.

Сначала выхотите создать копию данных и затем применить к ней удаление.

case SAVE_PLAYLIST:
    const { toPlayListFrom, selectedPlaylist } = action.payload;

    let newPlaylists = // state.savedPlaylists;
        Object.keys(selectedPlaylist).length > 0
            ?  {
                ...state.savedPlaylists,
                [toPlayListFrom]: selectedPlaylist
            }
            : ...state.savedPlaylists;

    // only apply a delete to the copy, not the original
    //
    if (Object.keys(selectedPlaylist).length === 0) {
        delete newPlaylists.savedPlaylists[toPlayListFrom]
    }

    return {
        ...state,
        savedPlaylists: newPlaylists
    }

В JavaScript нужно помнить одну вещь: объекты используют ссылки.Поэтому, если вы сначала не делаете копию, вы изменяете указанный объект (или пытаетесь, по крайней мере, некоторые объекты могли быть помечены как неизменяемые (const, действительно) и, следовательно, не могут быть изменены).

Я уверен, что есть способы оптимизировать приведенный выше код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...