可以说我有将所有对象键为false
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
我想所有键设置为false(重置它们)的对象。最好的办法是什么,我想避免与foreach
和东西循环。任何整齐的一班?
可以说我有将所有对象键为false
filter: {
"ID": false,
"Name": true,
"Role": false,
"Sector": true,
"Code": false
}
我想所有键设置为false(重置它们)的对象。最好的办法是什么,我想避免与foreach
和东西循环。任何整齐的一班?
使用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 }
谢谢你。一个问题,如果我想获得具有“真实”价值的财产(任何时候只有一个),那么最好如何做到这一点? – chefcurry7
示例数据表明断言一次只有一个属性为“真”。但不管多少,'_.keys(filter).filter(k => filter [k])'会给你一个快捷的数组,给所有真值的键。如果你想要严格的布尔值,你可以使用“true”的确切等价。你总是可以索引结果数组来得到第一个数组:'_.keys(filter).filter(k => filter [k])[0]'。如果没有,则返回'undefined'。对不起,该表达式中有三个“过滤器”实例,但您的变量名称会重载函数名称。 –
@ chefcurry7您可能还喜欢'_.find(_。keys(filter),k => filter [k])'。它的工作原理类似,但略短。 –
那么这里是一个一行香草JS:
Object.keys(filter).forEach(v => filter[v] = false)
它确实使用与.forEach()
方法的隐含的循环,但你必须循环这样或那样的(除非你通过更换复位整个对象与硬编码的默认对象文字)。
纠正我,如果我错了,但不能这样做**没有**循环。不确定OP是否理解这一点。 –
@CarlEdwards,这是很好的卡尔。我没有意识到箭头函数是有用的。 – chefcurry7
即使没有箭头功能,它仍然非常短,如在其他答案。 – nnnnnn
如果你不使用ES6,这里是ES5的对应部分。
Object.keys(filter).forEach(function(key, value) {
return filter[key] = false;
})
一小行代码兼容所有浏览器:
for(var i in your_object) your_object[i] = false;
hasOwnProperty必须使用
```
for(var i in your_object) {
if (Object.hasOwnProperty.call(your_object, i)) {
your_object[i] = false;
}
}
```
感谢,请写一个答案! – chefcurry7
这个怎么样,如果你已经处理了'filter',那么'filter:{}'? – Aruna