Мои циклы for не работают в JavaScript (с использованием Node.js для запуска файла JavaScript)

Рассмотреть возможность:

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 запускается. Этот код должен перебирать каждое свойство каждого объекта и усреднять значения.

Каков предполагаемый и фактический результат? Почему вы включили части, не относящиеся к вопросу?

RalfFriedl 30.10.2018 18:53
q > prop_names.length Итак, вы говорите: 0 > 3
epascarello 30.10.2018 18:56

В чем вопрос?

Peter Mortensen 29.08.2019 19:30

@Peter_Mortensen Это старый вопрос, и, честно говоря, я с трудом могу его прочитать. Думаю, я пытался спросить, почему мой цикл for не работает, и моя проблема заключалась в том, что у меня были перепутаны знаки больше и меньше.

MilesZew 31.08.2019 18:22
Поведение ключевого слова "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
4
191
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Документы 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 в качестве ключа.

проблемы были исправлены

MilesZew 30.10.2018 19:31

Сначала вы перепутали < и > во всех операторах 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)
Ответ принят как подходящий

Проблема с кодом, которым вы поделились:

  1. Условия цикла неверны. Вы использовали >, тогда как он должен быть <.

  2. Вы не инициализировали массив answers, но вы используете += для добавления current value с previous value.

  3. Вы неправильно обращаетесь к массиву 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)

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