Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从javascript中的json对象筛选布尔值_Javascript_Json_Object - Fatal编程技术网

从javascript中的json对象筛选布尔值

从javascript中的json对象筛选布尔值,javascript,json,object,Javascript,Json,Object,我想在javascript中过滤json对象中的所有布尔值。我设法让它在一个简单的json对象上工作,但在我的例子中,我有一个嵌套的对象。下面是该对象的一个示例。我不知道如何管理这个结构 { "User1": { "age":15, "country":"sw", "glasses":true, "car":true, "zip":1223, "name":"Frank" }, "U

我想在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
   }
}
var target = {};
parse(myObj , target);
只需迭代对象条目并对内部对象进行一些分解。或者如果您真的想要每个布尔值:

 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;
   }
 }
只需迭代对象条目并对内部对象进行一些分解。或者如果您真的想要每个布尔值:

 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;
   }
 }

如果你不知道哪些键是布尔键,你可以这样做

假设您将该对象指定给一个变量

var myObject = {  
    "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"
    }
}
然后,您可以在对象中循环并将过滤结果分配给
myBooleans

var myBooleans = {};

Object.keys(myObject).forEach(function(key) {
    var myNewUserObject = {};
    Object.keys(myObject[key]).forEach(function(userKey) {
        if (typeof myObject[key][userKey] === 'boolean') {
            myNewUserObject[userKey] = myObject[key][userKey];
        }
    });
    myBooleans[key] = myNewUserObject;
});

使用递归处理n个级别的对象可能有一种很好的方法。但这将适用于您提供的数据的形状。

如果您不知道哪些键是布尔键,您可以这样做

假设您将该对象指定给一个变量

var myObject = {  
    "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"
    }
}
然后,您可以在对象中循环并将过滤结果分配给
myBooleans

var myBooleans = {};

Object.keys(myObject).forEach(function(key) {
    var myNewUserObject = {};
    Object.keys(myObject[key]).forEach(function(userKey) {
        if (typeof myObject[key][userKey] === 'boolean') {
            myNewUserObject[userKey] = myObject[key][userKey];
        }
    });
    myBooleans[key] = myNewUserObject;
});
使用递归处理n个级别的对象可能有一种很好的方法。但这将适用于您提供的数据的形状。

试试这个

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]);
        }
    }
} 
})

这样称呼:

{  
   "User1":{  
      "glasses":true,
      "car":true
   },
   "User2":{  
      "glasses":false,
      "car":true
   }
}
var target = {};
parse(myObj , target);
希望这有帮助

试试这个

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]);
        }
    }
} 
})

这样称呼:

{  
   "User1":{  
      "glasses":true,
      "car":true
   },
   "User2":{  
      "glasses":false,
      "car":true
   }
}
var target = {};
parse(myObj , target);

希望这有助于

对于实际的JSON字符串,可以使用排除或修改值:

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);

控制台日志(o)对于实际的JSON字符串,可以使用来排除或修改值:

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);

控制台日志(o)这是如何从对象中筛选所有
布尔值的方法-

让输入={
“用户1”:{
“年龄”:15岁,
“国家”:“西南”,
“眼镜”:没错,
“汽车”:没错,
“zip”:1223,
“姓名”:“弗兰克”
},
“用户2”:{
“年龄”:23岁,
“国家”:“fr”,
“眼镜”:假的,
“汽车”:没错,
“zip”:5577,
“姓名”:“迈克”
}
};
让输出={};
Object.entries(input.map)([key,value],index)=>{
输出[键]={};
Object.entries(值)。
过滤器(([k,v],i)=>typeof v==“布尔”)。
map([k,v],i)=>{
输出[键][k]=v;
})
});

控制台日志(输出)这是如何从对象中筛选所有
布尔值的方法-

让输入={
“用户1”:{
“年龄”:15岁,
“国家”:“西南”,
“眼镜”:没错,
“汽车”:没错,
“zip”:1223,
“姓名”:“弗兰克”
},
“用户2”:{
“年龄”:23岁,
“国家”:“fr”,
“眼镜”:假的,
“汽车”:没错,
“zip”:5577,
“姓名”:“迈克”
}
};
让输出={};
Object.entries(input.map)([key,value],index)=>{
输出[键]={};
Object.entries(值)。
过滤器(([k,v],i)=>typeof v==“布尔”)。
map([k,v],i)=>{
输出[键][k]=v;
})
});
控制台日志(输出)