роль _ и уменьшения массива

#javascript #arrays #object #ecmascript-6 #redux

#javascript #массивы #объект #ecmascript-6 #сокращение

Вопрос:

У меня есть пример кода, использующий jsx и redux для установки редуктора следующим образом:

        case Test:
        const { [action.payload.id]: _, ...filteredAlerts } = state.alerts;

        return {
            ...state,
            ...{ 
                alerts:
                {
                    ...filteredAlerts
                }
            }
        };
    default:
        return state;
 

Все работает нормально, но я вообще не понимаю эту строку:

  const { [action.payload.id]: _, ...filteredAlerts } = state.alerts;
 

Кто-нибудь может дать простое и ясное объяснение по этому поводу?
Например, что здесь означает _?

 [action.payload.id]: _
 

и что делает эта линия?

 const { [action.payload.id]: _, ...filteredAlerts } = state.alerts;
 

Ответ №1:

Все, что он делает, это присваивает определенный элемент state.alerts локальной переменной с именем _ , а затем собирает остальные элементы с ... помощью . По сути, это копирование всех свойств, state.alerts кроме action.payload.id , в новую filteredAlerts переменную. Это длинная форма написания этого:

 let filteredAlerts = {};

for (let key in state.alerts) {
    if (key != "action.payload.id") {
        filteredAlerts[key] = state.alerts[key];
    }
}
 

За исключением того, что вы все еще можете получить доступ к action.payload.id with _ .

Комментарии:

1. Просто любопытно … обычно _ — это Lodash … есть ли особая причина, по которой в примере кода используется _ в качестве имени локальной переменной?

2. Без особой причины — за исключением Lodash и подчеркивания, оно используется как общее имя «игнорировать эту переменную». (Если переменная не имеет имени и не начинается просто с символа подчеркивания _id , тогда это что-то вроде «это автоматически / доступно только для чтения / конфиденциально / важно — не изменяйте его напрямую»).

3. Спасибо. Значит, это означает, что в коде есть скрытый цикл for ? является ли этот стиль кода функцией es6?

4. @HamedMinaee Это функция ES6, и да, скорее всего, у нее есть цикл для сбора всех свойств.

5. Я думаю, что последний комментарий тоже очень важен (и полезен). Это не относится к jsx или redux … это ES6.