Как получить значения из объекта JSON без определенного ключа

У меня ниже объект JSON, из которого я хочу получить только определенные значения в моем журнале консоли разработчика с помощью javascript. Я пробовал, но под кодом, но не знаю, как перебрать массив массива. Может ли кто-нибудь предложить, как я могу этого добиться.

var infoJSON;
for(key in myClass) {
  infoJSON = myClass[key];
  console.info(infoJSON);
}




var myClass= {
   "Subjects":"3",
   "Subject":{
      "maths":{
         "subject_id":"1",
         "subject_level":"easy",
         "marks":"90"
      },
      "english":{
         "subject_id":"2",
         "subject_level":"medium",
         "marks":"80"
      },
      "physics":{
         "subject_id":"3",
         "subject_level":"tough",
         "marks":"70"
      }
   },
   "Average": "80"
};

Я пытаюсь написать функцию JavaScript, которая выводит общее количество предметов, каждую тему с оценками и средние оценки в консоли инструментов разработчика браузера в формате, приведенном ниже.

Subjects: 3
- maths (90)
- english (80)
- physics (70)
Average: 80

Код должен работать для ЛЮБОГО объекта JSON с той же структурой, поэтому не нужно использовать жестко закодированные ключи (например, математика, физика).

Вы можете изучить использование функций map или lodash, если хотите, чтобы код был коротким и чистым.

molerat 14.06.2018 21:49
Поведение ключевого слова "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
1
722
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это можно сделать с помощью простых for in, Object.keys().

Попробуйте следующее:

var myClass= {"Subjects":"3","Subject":{"maths":{"subject_id":"1","subject_level":"easy","marks":"90"},"english":{"subject_id":"2","subject_level":"medium","marks":"80"},"physics":{"subject_id":"3","subject_level":"tough","marks":"70"}},"Average":"80"};

for(key in myClass){
  if (myClass[key].constructor.toString().indexOf("Object") > 0){
      Object.keys(myClass[key]).forEach((k)=>{
        console.info(k +" - "+ myClass[key][k].marks);
      });
   } else{
    console.info(key +" - " +myClass[key]);
   }
}

Большое вам спасибо, это тоже сработало для меня ... но некоторая разница в выводе, которую я искал. Большое спасибо за ваш ответ, который дает мне возможность узнать новое. :)

afulz29 14.06.2018 22:01
Ответ принят как подходящий

Это просто вопрос проверки того, что вы повторяете в своем классе. В случае, если ключ является строкой, вы можете просто распечатать ее, в случае, если это не так, вы можете перебирать ключи и распечатать тот

var myClass= {"Subjects":"3","Subject":{"maths":{"subject_id":"1","subject_level":"easy","marks":"90"},"english":{"subject_id":"2","subject_level":"medium","marks":"80"},"physics":{"subject_id":"3","subject_level":"tough","marks":"70"}},"Average":"80"};

for (let key in myClass) {
  let value = myClass[key];
  if (typeof value === 'string') {
    console.info( `${key}: ${value}` );
    continue;
  }
  console.info( Object.keys( value ).map( k => `- ${k} (${value[k].marks})` ).join('\n') );
}

// if you want it in one log output
console.info( Object.keys( myClass ).reduce( (result, key) => {
  if (typeof myClass[key] === 'object') {
    let value = myClass[key];
    return result.concat( Object.keys( value ).map( k => `- ${k} (${value[k].marks})` ) );
  }
  result.push( `${key}: ${myClass[key]}` );
  return result;
}, [] ).join('\n') );

Большое вам спасибо, это сработало для меня с ожидаемым результатом. Я новичок в этом, и я пытаюсь изучить JavaScript ... Я был бы очень признателен, если бы вы могли предложить хорошие учебные пособия в Интернете.

afulz29 14.06.2018 21:58

@AnkitFulzele Пожалуйста, я не знаю, с чего начать сейчас, зависит от того, что вы хотите делать со своими знаниями. У MDN есть учебное руководство, и поскольку они предлагают неплохую документацию, я бы начал смотреть там ...

Icepickle 14.06.2018 22:26

Предметы и Среднее всегда находятся в одном и том же положении, поэтому вы жестко запрограммируете его. Затем вам нужно перейти к массиву, чтобы определить другие поля:

var myClass= {
   "Subjects":"3",
   "Subject":{
      "maths":{
         "subject_id":"1",
         "subject_level":"easy",
         "marks":"90"
      },
      "english":{
         "subject_id":"2",
         "subject_level":"medium",
         "marks":"80"
      },
      "physics":{
         "subject_id":"3",
         "subject_level":"tough",
         "marks":"70"
      }
   },
   "Average": "80"
};
var infoJSON;
console.info('Subjects: ' + myClass['Subjects']);
for(key in myClass['Subject']) {
  console.info('- ' + key + ' (' + myClass['Subject'][key]['marks'] + ')');
}
console.info('Average: ' + myClass['Average']);

Большое спасибо @Johan Bertrand .. это снова самый простой способ добиться желаемого результата

afulz29 15.06.2018 05:31

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