Не работает forEach js

136
18 июня 2019, 16:20
        num_of_points = 72;
        for (var i = -num_of_points/2; i < num_of_points/2; i++) {
            for (var i2 = -num_of_points/2; i2 < num_of_points/2; i2++) {
                array[i + '-' + i2] = [];
                array[i + '-' + i2]['x'] = i * 100;
                array[i + '-' + i2]['y'] = i2 * 100;
            }
        }
        array.forEach(function output(value){
            console.log(value);
        });

Не выводит ни ошибок, ничего. Кроме того, если вывести массив просто в консоль (без forEach) то выведет без проблем. Но мне нужно будет потом его именно перебрать - пока что вот такая проблема

Answer 1

forEach проходит только по существующим элементам массива.

Так как данный массив пуст - length == 0, он ничего и не выводит.

Почему массив пуст?

массив считается пустым, так как нет числовых свойств, вместо них добавлены строковые.

В данном случае вместо массива стоило использовать объект {}.

Для обхода по свойствам можно воспользоваться циклом for..in

Либо, если необходим именно массив, стоит добавлять в него элементы, с помощью метода push

Answer 2

var array = {}, 
  num_of_points = 72; 
for (var i = -num_of_points / 2; i < num_of_points / 2; i++) { 
  for (var i2 = -num_of_points / 2; i2 < num_of_points / 2; i2++) { 
    array[i + '_' + i2] = {}; 
    array[i + '_' + i2]['x'] = i * 100; 
    array[i + '_' + i2]['y'] = i2 * 100; 
  } 
} 
 
for (var point in array) { 
  console.log(point + ' :', array[point]); 
} 
 
console.log('array =', array);

Answer 3

Все ответы уже даны, но просто для разнообразия:

var num_of_points = 72; 
var map = new Map(); 
for (var i = -num_of_points / 2; i < num_of_points / 2; i++) { 
  for (var i2 = -num_of_points / 2; i2 < num_of_points / 2; i2++) { 
    map.set(i + '-' + i2, { 
      x: i * 100, 
      y: i2 * 100 
    }); 
  } 
} 
map.forEach(function output(value, key) { 
  console.log(key, value); 
});

P.S. Наверно, правильней было бы писать такой код синтаксисом ES6+, но не хочу перегружать ТС информацией

Answer 4

В начале вашего кода добавьте var array = []; Но действия по заполнения массива с ключами вида -1--1 выглядят подозрительно.

А не выводит потому что у вас циклы не останавливаются.

READ ALSO
getdate() ошибка

getdate() ошибка

подскажите где ошибся, нужно от даты отнять 1 день

145
Иное действие во время закрытия модалки bootstrap при условии

Иное действие во время закрытия модалки bootstrap при условии

есть стандартная модалка bootstrap, есть кнопка next которая должна закрывать модалку, но при закрытии модалки нужно производить определённые...

124
xamarin где разворачивать backеnd мобильного приложения [закрыт]

xamarin где разворачивать backеnd мобильного приложения [закрыт]

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

136
Оптимальный код парсинга string в decimal

Оптимальный код парсинга string в decimal

Имею некий джейсон который десериализую в объект, одно из полей которого нужно спарсить в decimal

127