che*_*ry7 16 javascript lodash
让我们说我有一个对象
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
Run Code Online (Sandbox Code Playgroud)
我想将所有键设置为false(重置它们).什么是最好的方法,我想避免循环foreach和东西.任何整洁的衬垫?
nnn*_*nnn 34
那么这是一个带香草JS的单线:
Object.keys(filter).forEach(v => filter[v] = false)
Run Code Online (Sandbox Code Playgroud)
它确实使用了.forEach()方法的隐式循环,但是你必须以某种方式循环(除非你通过用硬编码的默认对象文字替换整个对象来重置).
Jon*_*ice 18
使用lodash,mapValues是一种优雅,无循环的方式:
filter = {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
};
filter = _.mapValues(filter, () => false);
Run Code Online (Sandbox Code Playgroud)
如果你想用Underscore.js做这个,有一个等价的,但名称略有不同:
filter = _.mapObject(filter, () => false);
Run Code Online (Sandbox Code Playgroud)
在任何一种情况下,值都filter将设置为:
{ ID: false,
Name: false,
Role: false,
Sector: false,
Code: false }
Run Code Online (Sandbox Code Playgroud)
如果您没有使用ES6,那么它就是ES5版本.
Object.keys(filter).forEach(function(key, value) {
return filter[key] = false;
})
Run Code Online (Sandbox Code Playgroud)
A small line of code compatible with all browsers:
for(var i in your_object) your_object[i] = false;
Run Code Online (Sandbox Code Playgroud)
如果您不想修改数组,这里有一个返回新数组的 ES6 替代方法:
Object.fromEntries(Object.keys(filter).map((key) => [key, false]))
Run Code Online (Sandbox Code Playgroud)
解释:
Object.keys 返回对象的键:
Object.keys({ a: 1, b: 2 }) // returns ["a", "b"]
Run Code Online (Sandbox Code Playgroud)
然后我们将结果映射["a", "b"]到[key, false]:
["a", "b"].map((key) => [key, false]) // returns [['a', false], ['b', false]]
Run Code Online (Sandbox Code Playgroud)
最后,我们称其Object.fromEntries将具有形式的数组数组映射[key, value]到一个对象:
Object.fromEntries([['a', false], ['b', false]]) // returns { a: false, b: false }
Run Code Online (Sandbox Code Playgroud)