我有一个像这样的对象。
Obj : {
USA : true
NZ : false,
Canada : true,
Japan : false,
China : true
Ind : false,
}
在我的功能中我得到countery.name = IND
所以在这种情况下如何更改各自国家的旗帜。
我在这里尝试的是
var countryName = countery.name // Getting some value here.
Object.keys(obj).map(function(i) {
/*if(countryName == obj.countryName){ // something missing here
obj.countryName.value
}*/
});
答案 0 :(得分:2)
通过Object.keys()
获取对象的属性,然后使用some()
迭代属性toLowerCase()
函数以比较属性和国家/地区名称。在if
语句中,如果找到密钥,则使用return true
来中断循环。
var obj = {
USA: true,
NZ: false,
Canada: true,
Japan: false,
China: true,
Ind: false
};
var country = {
name: 'IND'
};
Object.keys(obj).some(key => {
if(key.toLowerCase() === country.name.toLowerCase()){
obj[key] = !obj[key];
return true;
}
});
console.log(obj);
答案 1 :(得分:2)
更改为true或false。 Opsite到当前值
使用Object.keys
函数的解决方案:
var Obj = {USA : true,NZ : false,Canada : true,Japan : false,China : true,Ind : false},
keys = Object.keys(Obj),
len = keys.length,
countryName = 'IND';
while (len--) {
if (keys[len].toLowerCase() == countryName.toLowerCase()) {
Obj[keys[len]] = !Obj[keys[len]];
break; // avoiding redundant iterations
}
}
console.log(Obj);

答案 2 :(得分:1)
您可以使用Array#some
并在找到后退出循环。
var obj = { USA: true, NZ: false, Canada: true, Japan: false, China: true, Ind: false },
countryName = 'IND';
Object.keys(obj).some(function (k) {
if (k.toLowerCase() === countryName.toLowerCase()) {
obj[k] = !obj[k];
return true;
}
});
console.log(obj);
答案 3 :(得分:1)
当条件通过时,您可以更改对象的属性,如obj[countryName] = !obj[countryName].value
。
obj = {USA:true, NZ: false, Canada:true,Japan:false,China:true,Ind:false};
var countryName = 'Ind';
console.log("Before changing the flag:");
console.log(obj);
Object.keys(obj).map(function(i){
if (countryName == i)
obj[countryName] = !obj[countryName].value;
});
console.log("After changing the flag:");
console.log(obj);