将所有Object键设置为false

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()方法的隐式循环,但是你必须以某种方式循环(除非你通过用硬编码的默认对象文字替换整个对象来重置).

  • 纠正我,如果我错了,但这不能做****没有**循环.不确定OP是否理解这一点. (2认同)

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)


Spl*_*ake 8

如果您没有使用ES6,那么它就是ES5版本.

Object.keys(filter).forEach(function(key, value) {
    return filter[key] = false;
})
Run Code Online (Sandbox Code Playgroud)


Pin*_*uto 5

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)


Gio*_*ssi 5

如果您不想修改数组,这里有一个返回新数组的 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)