Установите для всех ключей объекта значение false
Допустим, у меня есть объект
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
Я хочу установить все ключи в false (для их сброса). Какой лучший способ сделать это, я бы хотел избежать цикла с foreach
и т.д. Любой аккуратный один лайнер?
Ответы
Ответ 1
Используя lodash, mapValues
является изящным, без циклы образом:
filter = {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
};
filter = _.mapValues(filter, () => false);
Если вы хотите сделать это с помощью Underscore.js, есть эквивалент, но с немного другим именем:
filter = _.mapObject(filter, () => false);
В любом случае значение filter
будет установлено так:
{ ID: false,
Name: false,
Role: false,
Sector: false,
Code: false }
Ответ 2
Ну вот один лайнер с ванилью JS:
Object.keys(filter).forEach(v => filter[v] = false)
Он использует неявный цикл с .forEach()
, но вам нужно будет так или иначе зацикливаться (если вы не сбросите его, заменив весь объект жестко запрограммированным литералом объекта по умолчанию).
Ответ 3
Если вы не используете ES6, то это ES5-аналог.
Object.keys(filter).forEach(function(key, value) {
return filter[key] = false;
})
Ответ 4
Небольшая строка кода, совместимая со всеми браузерами:
for(var i in your_object) your_object[i] = false;
Ответ 5
hasOwnProperty необходимо использовать
"""
for(var i in your_object) {
if (Object.hasOwnProperty.call(your_object, i)) {
your_object[i] = false;
}
}
"""
Ответ 6
Если вы имеете дело с переменными "scope", это может быть лучшим решением.
Object.keys(filter).reduce(function(accObj, parseObj) {
accObj[parseObj] = false;
return accObj;
}, {});
Ответ 7
С ES6 функции однострочник без мутации:
{
...Object.keys(filter).reduce((reduced, key) => ({ ...reduced, [key]: false }), {})
}