@zlodiak

Чем заменить flatMap?

У меня есть код, который создаёт видимость движущегося звёздного неба. Я взял его из популярной книжки. Но мне кажется, что в коде оператор flatMap используется не по назначению потому что вообще этот оператор работает с потоком потоков. В моём же случае нет потока потоков, а есть массив объектов, который формируется один раз.

Помогите пожалуйста заменить flatMap на более подходящий оператор.

демо здесь.

Код:
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
document.body.appendChild(canvas);
canvas.width = 200;
canvas.height = 200;

function paintStars(stars) {
	ctx.fillStyle = '#000';
  ctx.fillRect(0, 0, canvas.width, canvas.height);
  ctx.fillStyle = '#fff';
  stars.forEach(star => {
  ctx.fillRect(star.x, star.y, star.size, star.size);
  });
}

const SPEED = 40;
const STAR_NUMBER = 25;
const starStrteam = Rx.Observable.range(1, STAR_NUMBER)
	.map(() => {
  	return {
    	x: parseInt(Math.random() * canvas.width),
      y: parseInt(Math.random() * canvas.height),
      size: Math.random() * 3 + 1
    }
  })
  .toArray()
  .flatMap((starArray) => {
    console.log(starArray)
  	return Rx.Observable.interval(SPEED).map(() => {
    	starArray.forEach((star) => {
        if (star.y >= canvas.height) {
        	star.y = 0;
        }
        star.y += 3;
      })
      return starArray;
    })
  })
  .subscribe(starArray => {
  	paintStars(starArray);
  });
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы