Рассмотреть возможность:
let data = [{
a: 93,
b: 23,
c: 56
},
{
a: 96,
b: 14,
c: 45
},
{
a: 83,
b: 5,
c: 65
},
{
a: 99,
b: 16,
c: 47
},
{
a: 78,
b: 31,
c: 59
},
]
let isdata = {
a: 50,
b: 34,
c: 32
}
let prop_names = Object.keys(data[1])
console.info(prop_names)
let answers = []
for (let q = 0; q > prop_names.length; q++) {
console.info(answers)
for (let i = 0; i > data.length; i++) {
answers[q] += data[i].propnames[q]
}
}
for (let x = 0; x > answers.length; x++) {
answers[x] /= data.length
}
console.info(answers)Как видно из фрагмента кода, когда я отвечаю console.info внутри цикла for, он не запускается, но вне цикла for запускается. Этот код должен перебирать каждое свойство каждого объекта и усреднять значения.
q > prop_names.length Итак, вы говорите: 0 > 3В чем вопрос?
@Peter_Mortensen Это старый вопрос, и, честно говоря, я с трудом могу его прочитать. Думаю, я пытался спросить, почему мой цикл for не работает, и моя проблема заключалась в том, что у меня были перепутаны знаки больше и меньше.



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


Документы Javascript W3 объясняет второй оператор цикла for:
Statement 2 defines the condition for executing the code block.
Таким образом, цикл for => for(let q = 0; q > prop_names.length; q++) указывает, что вы хотите, чтобы q начинался с 0, и запускал внутренний код, когда q больше, чем prop_names.length, а затем увеличивал, чего никогда не произойдет. Измените все ваши вторые операторы в циклах for, чтобы запускать внутренний код, когда q меньше длины массива, такого как этот -
for(let q = 0; q < prop_names.length; q++)
Кроме того, замените data[i].propnames[q] на data[i][prop_names[q]], поскольку data[i] не имеет propnames в качестве ключа.
проблемы были исправлены
Сначала вы перепутали < и > во всех операторах if.
Во-вторых, нужно использовать что-то вроде data[i][prop_names[q]] вместо data[i].propnames[q]
Вот рабочий пример:
let data = [
{
a: 93,
b: 23,
c: 56
},
{
a: 96,
b: 14,
c: 45
},
{
a: 83,
b: 5,
c: 65
},
{
a: 99,
b: 16,
c: 47
},
{
a: 78,
b: 31,
c: 59
}
]
let prop_names = Object.keys(data[1])
console.info('prop_names:', prop_names)
let answers = []
for(let q = 0; q < prop_names.length; q++) {
answers[q]=0
for(let i = 0; i < data.length; i++) {
answers[q] += data[i][prop_names[q]]
}
}
for(let x = 0; x < answers.length;x++) {
answers[x] /= data.length
}
console.info('answers:', answers)Проблема с кодом, которым вы поделились:
Условия цикла неверны. Вы использовали >, тогда как он должен быть <.
Вы не инициализировали массив answers, но вы используете += для добавления current value с previous value.
Вы неправильно обращаетесь к массиву data. Правильный синтаксис - data[i][props_names[q]]. Взгляните на обозначение скобок для доступа к свойству объекта
Рабочее решение выглядит следующим образом:
var data = [{
a: 93,
b: 23,
c: 56
},
{
a: 96,
b: 14,
c: 45
},
{
a: 83,
b: 5,
c: 65
},
{
a: 99,
b: 16,
c: 47
},
{
a: 78,
b: 31,
c: 59
},
]
var isdata = {
a: 50,
b: 34,
c: 32
}
var prop_names = Object.keys(data[1])
console.info(prop_names)
var answers = Array.from(prop_names, () => 0);
for (var q = 0; q < prop_names.length; q++) {
for (var i = 0; i < data.length; i++) {
answers[q] += data[i][prop_names[q]]
}
}
for (var x = 0; x < answers.length; x++) {
answers[x] /= data.length
}
console.info(answers)
Каков предполагаемый и фактический результат? Почему вы включили части, не относящиеся к вопросу?