从javascript中的json对象筛选布尔值
我想在javascript中过滤json对象中的所有布尔值。我设法让它在一个简单的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
{
"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;
})
});
控制台日志(输出)代码>