Reduce возвращает undefined
У меня есть код в котором reduce переберает масив allPixel и возващает координаты подходящего пикселя. Сначала все хорошо но как reduce идёт по второму кругу allCoordinates становиться undefined а именно после return.
Как я понял когда reduce идёт по второму кругу allCoordinates присваивается координаты "0,0 1,0" (allCoordinates = "0,0 1,0") и из-за этого возникает проблема.
Нужно неизменять allCoordinates а присваивать изменения с return какой нибудь переменной, но не знаю как это сделать.
function definePoints (allPixel) { // allPixel = Array(256)
let points = allPixel.reduce((allCoordinates, coordinates) => {
let allCoordinatesColor = JSON.stringify(allCoordinates.color) //allCoordinatesColor = "{"red":0,"blue":0,"green":0,"alpha":0}", allCoordinates = {x: 0, y: 0, color: {…}}
let coordinatesColor = JSON.stringify(coordinates.color) //coordinatesColor = "{"red":0,"blue":0,"green":0,"alpha":0}", coordinates = {x: 1, y: 0, color: {…}}
if (allCoordinatesColor === coordinatesColor) //allCoordinatesColor = "{"red":0,"blue":0,"green":0,"alpha":0}", coordinatesColor = "{"red":0,"blue":0,"green":0,"alpha":0}"
{return `${allCoordinates.x},${allCoordinates.y} ${+coordinates.x},${+coordinates.y}`} //allCoordinatesColor = "{"red":0,"blue":0,"green":0,"alpha":0}", coordinatesColor = "{"red":0,"blue":0,"green":0,"alpha":0}"
return allCoordinates
})
console.log(points)
}
В данном примере массив состоит с 256 объектов тоесть 256 писелей:
const pixelData = {
x : pixelX, // 0
y : pixelY, // 0
color : {
red : +imgData.data[i], // 0
blue : +imgData.data[i+1], // 0
green : +imgData.data[i+2], // 0
alpha : +imgData.data[i+3] * 0.00392156862745098 // 0
}
}
Здесь прозрачный пиксель с нулевыми координатами.
Ответы (1 шт):
Проблема наверно в том, что третей строке ты обращаешься к свойству color
let allCoordinatesColor = JSON.stringify(allCoordinates.color)
Но после того, как сработает конструкция if
if (allCoordinatesColor === coordinatesColor)
Та возвращаешь не объект, а строку, в которой нет свойства color.
Тебе нужно внимательно изучить документацию по .reduce().
Судя по задаче, тебе нужно отфильтровать массив. Для этого лучше использовать метод .filter().