簡體   English   中英

從不可變的JS對象中刪除屬性

[英]Remove a property from an immutable JS object

在我的本機應用程序中,我想刪除Redux中的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對象中刪除屬性?

您的刪除語句是錯誤的。 該命令通常返回true(在某些情況下,它可能返回false。)

同樣,正如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 ,實際上),因此無法對其進行修改。)

我敢肯定有優化上面代碼的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM