Есть функция getCellsOfSurface, на вход которой подаётся объект objSurface. Структура входного объекта objSurface такова:
var pointsOfSurface=[[1,2,3,4],[5,6,7,8],[1,2,3,4],[5,6,7,8]];
var objSurface = {
width: 2,
height: 2,
vertices: {}
};
objSurface.vertices=pointsOfSurface;
где свойство verteces представляет собой массив, элементами которого являются другие массивы, содержащие 4 числа. Например, [[1,2,3,4], [5,6,7,8], ... , [k, l, m, n]] Если обратится к последнему числу элемента (т.е. номер 3) массива через консоль таким образом objSurface.vertices[204][3], то всё нормально. А в теле функции такой подход не работает.
function getCellsOfSurface(objSurface) {
var result = [];
var cell = {
x: 0,
y: 0,
radiation: 0
};
var averageRadiation;
for (var j=1; j<objSurface.height; j++) {
for (var i=1; i<objSurface.width; i++) {
averageRadiation=objSurface.vertices[2][3];
cell['x']=i;
cell['y']=j;
cell.radiation=averageRadiation;
result.push(cell);
};
};
return result;
};
я получаю ошибку Uncaught TypeError: Cannot read property '3' of undefined Почему? Даже выполнив тот же запрос к элементу в коде вне функции всё проходит нормально alert(objSurface.vertices[2][3]);
Функция getSerialNumber работает нормально и возвращает число. Даже если в функции getCellsOfSurface убрать [3] и оставить просто
averageRadiation=objSurface.vertices[2];
то это тоже будет работать но мне возвратит массив [1,2,3,4]. Почему я не могу обратиться глубже?
И ещё они вопрос: в конце выполнения у всех cell.x и cell.y я получаю одно и то же значение 2 и 2. А должны быть возрастающие координаты. Здесь грешу на асинхронность.
Вот Ваш пример. Где ошибка?
var pointsOfSurface = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[1, 2, 3, 4],
[5, 6, 7, 8]
];
var objSurface = {
width: 2,
height: 2,
vertices: {}
};
objSurface.vertices = pointsOfSurface;
function getCellsOfSurface(objSurface) {
var result = [];
var cell = {
x: 0,
y: 0,
radiation: 0
};
var averageRadiation;
for (var j = 1; j < objSurface.height; j++) {
for (var i = 1; i < objSurface.width; i++) {
averageRadiation = objSurface.vertices[2][3];
cell['x'] = i;
cell['y'] = j;
cell.radiation = averageRadiation;
result.push(cell);
};
};
return result;
};
console.log(getCellsOfSurface(objSurface));
Вы, совершенно определенно, вылезаете за границу массива. Ищите. Возможные причины: неправильные значения width
и height
, асинхронность.
А по поводу:
у всех cell.x и cell.y я получаю одно и то же значение
for (var j = ... j++) {
for (var i = ... i++) {
averageRadiation = objSurface.vertices[2][3];
var cell = { // создаем новый объект
x: i,
y: j,
radiation: averageRadiation
}
result.push(cell);
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый деньЗадача состоит в следующем - есть поле для вводе и кнопка, по нажатию которой происходит запрос на OPM для получения координатов...
Есть не сортированный массив, который нужно отсортировать по принципу если value текущего элемента равно val следующего то в начале идет текущий...