假设我有一个对象
Exact_predicates_exact_constructions_kernel::Point_3
我想将所有键设置为false(重置它们)。我最好的方法是做什么,我希望避免使用 filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
和其他内容进行循环。任何整齐的衬垫?
答案 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()
与传播算子:)