我想在javascript中过滤json对象中的所有布尔值。我设法让它在一个简单的json对象上工作,但在我的例子中,我得到了一个嵌套的对象。下面是该对象的一个示例。我不知道如何管理这个结构。
{
"User1":
{
"age":15,
"country":"sw",
"glasses":true,
"car":true,
"zip":1223,
"name":"Frank"
},
"User2":
{
"age":23,
"country":"fr",
"glasses":false,
"car":true,
"zip":5577,
"name":"Mike"
}
}
因此,我想收到这样的东西:
{
"User1":{
"glasses":true,
"car":true
},
"User2":{
"glasses":false,
"car":true
}
}
发布于 2018-07-07 04:12:18
const result = {};
for(const [key, value] of Object.entries(input)) {
const {glasses, car} = value;
result[key] = {glasses, car};
}
只需迭代对象条目,并对内部对象进行一些解构。或者如果你真的想要每一个布尔值:
const result = {};
for(const [key, value] of Object.entries(input)) {
const out = result[key] = {};
for(const [innerKey, innerValue] of Object.entries(value)) {
if(typeof innerValue === "boolean")
out[innerKey] = innerValue;
}
}
发布于 2018-07-07 04:25:43
对于实际的JSON字符串,可以使用JSON.parse
reviver parameter来排除或修改值:
var j = '{"User1":{"age":15,"country":"sw","glasses":true,"car":true,"zip":1223,"name":"Frank"},"User2":{"age":23,"country":"fr","glasses":false,"car":true,"zip":5577,"name":"Mike"}}';
var o = JSON.parse(j, (k, v) => typeof v == 'number' || typeof v == 'string' ? void 0 : v);
console.log(o);
发布于 2018-07-07 04:24:38
尝尝这个
function parse(obj , targetObject) {
var k;
if (obj instanceof Object) {
for (k in obj){
if(typeof(obj[k]) === "boolean"){
targetObject[k] = obj[k];
}
if(obj[k] instanceof Object) {
targetObject[k] = {};
parse(obj[k],targetObject[k]);
}
}
}
};
像这样调用:
var target = {};
parse(myObj , target);
希望这能有所帮助
https://stackoverflow.com/questions/51217008
复制相似问题