我需要更改一个嵌套变量属性。首先检查它是否存在,然后在必要时将其更改为“N/A”。这就是我拥有的。
const json = {
isCat: {
isAvaliable: true,
count: 5
},
isDog: {
isAvaliable: true,
count: 10
},
isFrog: {
isAvaliable: false,
count: null
}
}
const newJson = { ...json }
if(!jsonObj.isCat.count) {
newJson = {...newJson, json.isCat.count: 'N/A'}
}
我不确定如何设置计数,比方说,直接转到它并改变值。这看起来很简单,也许我遗漏了什么。
我可以看到if语句中的值,但不能对实际属性值本身进行任何更改。基本上,如果值为null,则将其更改为“N/A”
发布于 2020-10-27 19:23:31
可以使用数组reduce方法。首先使用Object.keys方法获取所有密钥。然后遍历键并检查计数是否为空。如果为null,则将其更改为“N/A”。
const json = {
isCat: {
isAvaliable: true,
count: 5,
},
isDog: {
isAvaliable: true,
count: 10,
},
isFrog: {
isAvaliable: false,
count: null,
},
};
const ret = Object.keys(json).reduce((prev, c) => {
const p = prev;
if (!json[c].count) p[c] = { ...json[c], count: 'N/A' };
else p[c] = { ...json[c] };
return p;
}, {});
console.log(ret);
发布于 2020-10-27 19:26:22
使用Object.entries和Object.fromEntries可以将旧对象映射到新对象。如果count
属性为真,即不是null
,则将其映射到,否则浅复制元素并使用新的"N/A"
值更新count
属性。这样可以避免改变原始对象。
const newJson = Object.fromEntries(Object.entries(json).map(([key, value]) => ([
key,
value.count ? value : { ...value,
count: 'N/A'
}
])));
const json = {
isCat: {
isAvaliable: true,
count: 5
},
isDog: {
isAvaliable: true,
count: 10
},
isFrog: {
isAvaliable: false,
count: null
}
};
const newJson = Object.fromEntries(Object.entries(json).map(([key, value]) => ([
key,
value.count ? value : { ...value,
count: 'N/A'
}
])));
console.log(newJson);
发布于 2020-10-27 19:45:32
另一个解决方案是reduce。注意返回值中的逗号运算符。
const json = {isCat: {isAvaliable: true,count: 5,},isDog: {isAvaliable:true,count: 10,},isFrog: {isAvaliable: false,count: null,},};
const res = Object.keys(json).reduce((pV,cV)=>(json[cV].count==null?json[cV].count='N/A':null,json),{});
console.log(res);
https://stackoverflow.com/questions/64561483
复制