将所有Object键设置为false

时间:2016-11-28 02:15:56

标签: javascript lodash

假设我有一个对象

Exact_predicates_exact_constructions_kernel::Point_3

我想将所有键设置为false(重置它们)。我最好的方法是做什么,我希望避免使用 filter: { "ID": false, "Name": true, "Role": false, "Sector": true, "Code": false } 和其他内容进行循环。任何整齐的衬垫?

9 个答案:

答案 0 :(得分:30)

嗯,这是一个带香草JS的单行:

Object.keys(filter).forEach(v => filter[v] = false)

它确实使用了.forEach()方法的隐式循环,但是你必须以这种或那种方式循环(除非你通过用硬编码的默认对象文字替换整个对象来重置)。

答案 1 :(得分:16)

使用lodash,SELECT GVI0Count FROM ( SELECT COUNT(GVI0) AS GVI0, COUNT(GVI1) AS GVI1, COUNT(GVI2) AS GVI2 FROM dbo.HullInspectionProgram WHERE (StructureEntry='1' AND Year='2016') ) UNPIVOT (GVI0Count FOR ListOfColumns IN (GVI0)) AS unpivott 是一种优雅,无循环的方式:

mapValues

如果你想用Underscore.js做这个,有一个等价的,但名字略有不同:

filter = {
    "ID": false,
    "Name": true,
    "Role": false,
    "Sector": true,
    "Code": false
};

filter = _.mapValues(filter, () => false);

在任何一种情况下,filter = _.mapObject(filter, () => false); 的值都将设置为:

filter

答案 2 :(得分:7)

如果你不使用ES6,那么这就是它的ES5版本。

Object.keys(filter).forEach(function(key, value) {
    return filter[key] = false;
})

答案 3 :(得分:2)

必须使用

hasOwnProperty

```

for(var i in your_object) {
  if (Object.hasOwnProperty.call(your_object, i)) {
    your_object[i] = false;
  }
}

```

答案 4 :(得分:1)

与所有浏览器兼容的一小段代码:

for(var i in your_object) your_object[i] = false;

答案 5 :(得分:1)

如果您要处理“作用域”变量,这可能是一个更好的解决方案。

Object.keys(filter).reduce(function(accObj, parseObj) {
                accObj[parseObj] = false;
                return accObj;
              }, {});

答案 6 :(得分:0)

具有ES6功能的一线无突变:

{
  ...Object.keys(filter).reduce((reduced, key) => ({ ...reduced, [key]: false }), {})
}

答案 7 :(得分:0)

如果您不想修改数组,可以使用以下ES6替代方法返回一个新数组:

Object.fromEntries(Object.keys(filter).map((key) => [key, false]))

说明:

Object.keys返回对象的键:

Object.keys({ a: 1, b: 2 }) // returns ["a", "b"]

然后我们将结果["a", "b"]映射到[key, false]

["a", "b"].map((key) => [key, false]) // returns [['a', false], ['b', false]]

最后,我们调用Object.fromEntries,将[key, value]形式的数组数组映射到对象:

Object.fromEntries([['a', false], ['b', false]]) // returns { a: false, b: false }

答案 8 :(得分:0)

这就是我所说的一种简洁的单线解决方案:

const filtered = Object.assign(...Object.keys(filter).map(k => ({ [k]: false })));

演示:

const filter = {
  'ID': false,
  'Name': true,
  'Role': false,
  'Sector': true,
  'Code': false
};

const filtered = Object.assign(...Object.keys(filter).map(k => ({ [k]: false })));

console.log(filtered);

我们基本上是使用Object.assign()将对象转换为数组,因此我们可以在其上使用map()功能将每个属性值设置为false,然后使用Object.assign()与传播算子:)