У меня ниже объект 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 с той же структурой, поэтому не нужно использовать жестко закодированные ключи (например, математика, физика).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Это можно сделать с помощью простых 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]);
}
}Большое вам спасибо, это тоже сработало для меня ... но некоторая разница в выводе, которую я искал. Большое спасибо за ваш ответ, который дает мне возможность узнать новое. :)
Это просто вопрос проверки того, что вы повторяете в своем классе. В случае, если ключ является строкой, вы можете просто распечатать ее, в случае, если это не так, вы можете перебирать ключи и распечатать тот
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 ... Я был бы очень признателен, если бы вы могли предложить хорошие учебные пособия в Интернете.
@AnkitFulzele Пожалуйста, я не знаю, с чего начать сейчас, зависит от того, что вы хотите делать со своими знаниями. У MDN есть учебное руководство, и поскольку они предлагают неплохую документацию, я бы начал смотреть там ...
Предметы и Среднее всегда находятся в одном и том же положении, поэтому вы жестко запрограммируете его. Затем вам нужно перейти к массиву, чтобы определить другие поля:
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 .. это снова самый простой способ добиться желаемого результата
Вы можете изучить использование функций
mapилиlodash, если хотите, чтобы код был коротким и чистым.