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 шт):

Автор решения: an_parubets

Проблема наверно в том, что третей строке ты обращаешься к свойству color

let allCoordinatesColor =   JSON.stringify(allCoordinates.color)

Но после того, как сработает конструкция if

if (allCoordinatesColor === coordinatesColor)

Та возвращаешь не объект, а строку, в которой нет свойства color.

Тебе нужно внимательно изучить документацию по .reduce().

Ссылка на документацию

Судя по задаче, тебе нужно отфильтровать массив. Для этого лучше использовать метод .filter().

→ Ссылка