#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.