Неизменность против ручной проверки производительности

В нативном приложении с использованием приставки я бы хотел обновить состояние приложения с помощью immutable-js. я использую mergeDeep обновить состояние. Есть одна проблема: когда был удален элемент из массива. Таким образом, я обнаружил этот случай, преобразовав новые данные в неизменяемые, а затем сравнив размеры. Это отлично работает:

function updateSettings(state, action) {
    const mutablePath = [].concat(action.path);
    const lastPathKey = mutablePath.pop();
    let nextState;
    let newArr;

    if (isInt(lastPathKey)) {
        // An array has been changed
        if (Immutable.fromJS(action.data).getIn(mutablePath).size < state.getIn(mutablePath).size) {
            // The element at lastPathKey has been removed
            newArr = state.getIn(mutablePath).remove(lastPathKey);
            nextState = state.setIn(mutablePath, newArr);
        }
    }

    if (!nextState) {
        nextState = state.mergeDeep(action.data);
    }

    return nextState;
}

Action.data - это всегда полный путь к объекту (как я использую tcomb-form-native): если элемент был изменен, путь к действию выглядит следующим образом:

action.path = ["testStruct", "deepArray", 0, "objectArr", "valDAOA1"]
action.data = {
    "isShowHelp": false,
    "testStruct": {
        "deepArray: [
            {
                "objectArr": {
                    "valDAOA1": 10
                }
            },
            {
                "objectArr": {
                    "valDAOA1": 20
                }
            }
        ]
    }
}

Если элемент массива был удален:

action.path = ["testStruct", "deepArray", 1]
action.data = {
    "isShowHelp": false,
    "testStruct": {
        "deepArray: [
            {
                "objectArr": {
                    "valDAOA1": 10
                }
            }
        ]
    }
}

Мне интересно, было бы более эффективно получить размер массива с помощью ручного метода, подобного предложенному в /questions/35436038/dostup-k-vlozhennyim-obektam-javascript-s-pomoschyu-strokovogo-klyucha/35436059#35436059 и есть ли другие случаи, которые следует принимать во внимание.

0 ответов

Другие вопросы по тегам