Фильтровать логическое значение из объекта json в javascript

Я хотел бы отфильтровать все логические значения из объекта json в javascript. Мне удалось заставить его работать с простым объектом 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
   }
}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 158
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Ответ принят как подходящий
 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;
   }
 }

Если вы не знаете, какие ключи будут логическими, вы можете сделать это следующим образом.

Допустим, вы назначаете этот объект переменной.

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

Вероятно, есть хороший способ справиться с уровнями п объекта, используя рекурсию. Но это будет работать для формы предоставленных вами данных.

Попробуй это

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

Надеюсь это поможет

Для фактической строки JSON JSON.parse reviver параметр может использоваться для исключения или изменения значений:

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.info(o);

Вот как вы можете отфильтровать все значения boolean из объекта -

let input = {
  "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"
  }
};

let output = {};
Object.entries(input).map(([key, value], index) => {
  output[key] = {};
  Object.entries(value).
      filter(([k, v], i) => typeof v === "boolean").
      map(([k, v], i) => {
        output[key][k] = v;
      })
});

console.info(output);

Другие вопросы по теме