Javascript 更改对象的一个属性
我需要遍历Javascript 更改对象的一个属性,javascript,loops,object,Javascript,Loops,Object,我需要遍历对象,并将其非true属性中的一个更改为true var object = {a: true, b: false, c: false, d: false} function changeOne(object) { for(var i in object) { if(object[i] !== true) { object[i] = true; break; } } } 这似乎是一种非常糟糕的方式。有更好的方法吗?您可以迭代键并修改第一
对象
,并将其非true
属性中的一个更改为true
var object = {a: true, b: false, c: false, d: false}
function changeOne(object) {
for(var i in object) {
if(object[i] !== true) {
object[i] = true;
break;
}
}
}
这似乎是一种非常糟糕的方式。有更好的方法吗?您可以迭代键并修改第一个具有
false
值的键:
for (let key of Object.keys(obj)) {
if (obj[key] !== true) {
obj[key] = true;
break;
}
}
输出
{ a: true, b: true, c: false, d: false }
解释
Object.keys(obj)
将获得在对象本身上定义的属性数组,而var i in Object
将返回作为原型一部分的其他属性。另一种方法是添加一个检查obj.hasOwnProperty(key)
您的代码实际上很好,只是没有定义对象的键顺序,因此您的代码可能会根据浏览器引擎设置b
或c
或d
(很可能不是b
,但您永远不知道…),所以你应该自己下订单:
function changeOne(object) {
for(var key of ["a", "b", "c", "d"]) {
if(object[key] !== true) {
object[key] = true;
break;
}
}
}
如果你的意思是“更短”的意思是“更好”:
您可以获取对象的条目,并在更改属性后用于短路
函数setToTrue(对象){
Object.entries(Object.every([k,v])=>v | |!(Object[k]=true));
返回对象;
}
var对象={a:true,b:false,c:false,d:false};
log(setToTrue(object));
log(setToTrue(object));
log(setToTrue(object))代码>
.as控制台包装{max height:100%!important;top:0;}
您真的认为return
会像您预期的那样在这里工作吗?“No”会更有效吗concise@snazzybouche“我不明白你的评论,想解释一下吗?”阿尔法辛问,“有没有更好的办法?”你的答案基本上是我问题中代码的重复——如果你能解释为什么你的答案中的细微差别会使它更好,那将是理想的,但除此之外,它几乎是相同的same@snazzybouche我刚才做了一个可能的复制品:你们的方式很好,不要让别人把你们搞糊涂了。关键的顺序对OP都重要吗?为什么要硬编码对象道具,OP说它们是不可预测的…@dandavus不,OP说他不知道到底哪个道具会改变。是的,钥匙顺序很重要。
const changeOne = obj => ["a", "b", "c", "d"].some(key => (obj[key] !== true) && (obj[key] = true));