Как может il oop в два раза больше, чем соз граф на массив чисел с setTimeout - PullRequest
0 голосов
/ 07 января 2020

У меня есть массив чисел, подобный этому:

const numbers = [.1, .2, .3, .4, .5, .6, .7, .8, .9, 1];

Я хотел бы сделать что-то вроде этого графика:

cos graph

Что Я достиг:

const cosNumbers = (reverse) => {
(reverse ? numbers.reverse() : numbers).forEach((number) => {
 ((index) => {
   setTimeout(() => { console.log(index) }, index * 1000);
 })(number);
});
};

cosNumbers();
cosNumbers(true);

Я могу получить первые результаты функции, как я хочу. но второе не может, потому что я меняю числа с меньших на большие числа, поэтому наименьшее число сработает раньше, чем большее в setTimeout (). Это простая функция, но я не знаю, почему это так сложно для меня: (

1 Ответ

0 голосов
/ 07 января 2020

Проблема в том, что вы передаете число в свой IIFE, но используете его в качестве индекса. Они отличаются: number относится к фактическим значениям массива, а index относится к их позициям в массиве.

Помните, что индекс доступен как второй аргумент в .forEach() перезвонить. Таким образом, вы должны обращаться к number и index по отдельности следующим образом: .forEach((number, index) => ...)

Я считаю, что вы хотели это:

setTimeout(() => console.log(number), index * 1000);

Поскольку вы хотите:

  • Записать фактическое значение (элемент в массиве)
  • Использовать индекс элемента для определения времени его появления

const numbers = [.1, .2, .3, .4, .5, .6, .7, .8, .9, 1];
const cosNumbers = (reverse) => {
  (reverse ? numbers.reverse() : numbers).forEach((number, index) => {
    setTimeout(() => console.log(number), index * 1000);
  });
};

cosNumbers();
cosNumbers(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...