Как вывести в консоль каждый елемент массива с помощью setTimeout?

Всем доброй ночи! Нужно создать функцию showWithDelay(массив). Метод принимает массив и на консоль по очереди выводит каждый элемент массива с интервалом в одну секунду.

Как можно увидеть я создаю функцию и с помощью forEach и для каждого елемента ставлю задержку в 1сек. Консоль никакой ошибки не выдает. Как исправить?

var time =function showWithDelay (delay) {
            this.delay = [1, 2, 3, 4];
            delay.forEach(element => {
                for (let key in element) {
                    setTimeout (showWithDelay, 1000);
                }
            });
        };

        console.log(time);

Второй вариант написания тоже не дал позитивного результата

var time =function showWithDelay (delay) {
        this.delay = [1, 2, 3, 4];
        for (let i = 0; i < delay.length; i++) {
            setTimeout (showWithDelay, 1000);
            console.log(delay[i]);
        }
    }
   

Ответы (4 шт):

Автор решения: Алексей Шиманский

function showWithDelay(arr) {
    for (let i = 0; i < arr.length; i++) {
        setTimeout(() => {
          console.log(arr[i]);
        }, 1000 * (i + 1));
    }
}

showWithDelay([1, 2, 3, 4]);

→ Ссылка
Автор решения: Igor

function showWithDelay(arr) {
  arr = Array.from(arr);
  
  let i = 0;
  const timer = setInterval(() => {
    console.log(arr[i++]);
    if (i == arr.length)
      clearInterval(timer);
  }, 1000);
}

showWithDelay([1, 2, 3, 4]);

→ Ссылка
Автор решения: NoSkill

Простейший вариант delayedLog(a, i) где a - массив, i - позиция с которой нужно выводить данные (по умолчанию 0).

function delayedLog(a, i = 0) {
  if (i < a.length) {
    console.log(a[i]);
    window.setTimeout(delayedLog, 1000, a, i+1);
  }
}

delayedLog([1, 2, 3, 4]);

→ Ссылка
Автор решения: Rudi

function g(mas, n) {
  let i = n || 0;
  setTimeout(()=>{
    if(i != mas.length) {
      console.log(mas[i]);
      g(mas, ++i);
    }
  },1000)
}
g([0,1,2,3,4])

→ Ссылка