Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
21 / 24 / 1
Регистрация: 23.04.2012
Сообщений: 627
1

Каждую секунду присвоить значение переменной равное элементу массива?

03.09.2021, 20:23. Показов 958. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Необходимо переменной a каждую секунду присваивать значение из массива arr (в бесконечном цикле). По сути нужно перебирать массив методом forEach:

Javascript
1
2
3
4
5
var arr = [1, 2, 3];
 
arr.forEach(function(num, i, arr) {
  // ??? ;
});
а вот как сюда прикрутить setTimeout ? Да еще все зациклить?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2021, 20:23
Ответы с готовыми решениями:

Увеличение значение переменной на 1 каждую секунду
Нужен счетчик которые чтоб прибавлял на 1 каждую секунду. Я пытался сделать но при перезагрузке...

Каждому элементу массива Q присвоить значение, равное сумме значений соответствующих элементов одномерных массивов P и H
Каждому элементу одномерного массива Q присвоить значение, равное сумме значений соответствующих...

Разработать ИТ, позволяющую каждому элементу одномерного массива Q присвоить значение, равное сумме значений соответствующих элементов одномерных масс
Разработать ИТ, позволяющую каждому элементу одномерного массива Q присвоить значение, равное сумме...

Переменной присвоить значение равное 1, если максимальный элемент массива А больше максимального элемента В
2.Даны массивы A из N элементов, и B из M элементов.Переменной С присвоить значение равное 1,если...

Присвоить предыдущему элементу массива значение переменной
Присвоить предыдущему элементу массива p значение переменной yj и переадресовать указатель pv на...

11
Модератор
Эксперт JS
6279 / 3518 / 1050
Регистрация: 07.09.2019
Сообщений: 5,667
Записей в блоге: 1
03.09.2021, 20:58 2
Если через forEach, то можно так
Javascript
1
2
3
4
5
6
let a;
arr.forEach(function (num, i, arr) {
  setTimeout(() => {
    a = num;
  }, i * 1000);
});
Но здесь можно обойтись без циклов
Javascript
1
2
3
4
5
6
7
8
9
10
let a;
function f(i = 0) {
  if (i == arr.length) return;
  a = arr[i++];
  //console.log(a);
  setTimeout(() => {
    f(i);
  }, 1000);
}
f();
2
958 / 520 / 244
Регистрация: 20.05.2015
Сообщений: 774
03.09.2021, 22:25 3
DrType, здравствуйте. Там же нужен бесконечный цикл.

В Вашем примере нужно заменить:

Javascript
1
2
3
if (i == arr.length) return;
// →
if (i == arr.length) i = 0;
2
21 / 24 / 1
Регистрация: 23.04.2012
Сообщений: 627
04.09.2021, 00:18  [ТС] 4
Немного откорректирую задачу:

есть массив данных arr, мне нужно стряпать функцию, которая бесконечно перебирает значения каждого элемента массива и присваивает это значение переменной a. При обращении она должна возвращать текущее значение переменной а. Почему-то не получается вернуть значения.
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
06.09.2021, 08:37 5
Цитата Сообщение от uzlprog Посмотреть сообщение
Почему-то не получается вернуть значения.
Код где? Из кофейной гущи значения не вернуть.
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
const foo = arr => {
  let i = 0;
 
  setInterval(() => {
    if (++i === arr.length) i = 0
  }, 1000);
 
  return () => arr[i];
}
 
const bar = foo([1, 2, 3, 4, 5]);
 
setInterval(() => console.log(bar()), 500);
1
21 / 24 / 1
Регистрация: 23.04.2012
Сообщений: 627
07.09.2021, 07:47  [ТС] 6
Формализую задачу: необходимо создать массив, и заполнить его динамическим значением переменной a, которая с периодом в 1 сек. принимает значения элементов первоначального массива. Значения функции а для наполнения второго массива снимаются через время t, заданное пользователем.

У меня такой код получился (пока):

Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
var a;
async function f(i = 0) {
  if (i == arr.length) i = 0;
  a = arr[i++];
  setTimeout(() => {
    f(i);
  }, 1000);
}
f();
function N1() {
let c = 0;
let arr2 = [];
let N = 100;
let b;
for (var k = 1; k <= N; k++) {
   arr2.push(a);
   document.write('Item: ' + arr2[c++] + ' of ' + arr2.length + '<br/>');
}
}
Как мне организовать задержку таким образом, чтобы цикл for снимал показания a через заданное время t?

Еще я так понимаю выполнение функции f() и N1() должно быть асинхронным?!
0
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
07.09.2021, 09:46 7
Какая-то каша в условии.
1)
Цитата Сообщение от uzlprog Посмотреть сообщение
значением переменной a ... Значения функции а
Так a это переменная или функция?
2)
Цитата Сообщение от uzlprog Посмотреть сообщение
создать массив, и заполнить его динамическим значением переменной a, которая с периодом в 1 сек. принимает значения элементов первоначального массива
То есть у нас будет массив, все элементы которого равны a, а a в свою очередь будет равно элементам массива? Это парадокс называется. Какому именно элементу массива должно быть равно a? Какова длина массива? И всё-таки как этот массив заполняется?
3)
Цитата Сообщение от uzlprog Посмотреть сообщение
с периодом в 1 сек. ... через время t, заданное пользователем
Так всё-таки каждую секунду или каждые t секунд?
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
07.09.2021, 10:13 8
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
const generator = {
  arr: [],
  current: 0,
  start(src) {
    setInterval(() => {
      this.arr.push(src[this.current]);
      if (++this.current === src.length) this.current = 0;
    }, 1000);
  }
}
 
const arr = [1, 2, 3, 4, 5, 6];
const t = 10; // sec
 
generator.start(arr);
 
setTimeout(() => {
  const p = document.createElement('p');
  p.textContent = generator.arr;
  document.body.appendChild(p);
}, t * 1000);
1
Эксперт JS
2454 / 1761 / 624
Регистрация: 11.07.2016
Сообщений: 4,051
07.09.2021, 10:27 9
j2FunOnly, возможно, имелось в виду:
Javascript
17
setInterval(() => {
?
0
the hardway first
Эксперт JS
2461 / 1836 / 906
Регистрация: 05.06.2015
Сообщений: 3,603
07.09.2021, 10:38 10
Balanaar, смотря как трактовать
Цитата Сообщение от uzlprog Посмотреть сообщение
чтобы цикл for снимал показания a через заданное время t?
Там ещё какой-то N равный 100, k начинается с 1 и индекс c. Я не стал вникать в это:
Цитата Сообщение от uzlprog Посмотреть сообщение
Javascript
15
16
17
18
for (var k = 1; k <= N; k++) {
   arr2.push(a);
   document.write('Item: ' + arr2[c++] + ' of ' + arr2.length + '<br/>');
}

Не по теме:


Не совсем понимаю идею ТС, возможно тут Сага о X, Y и Z...

1
21 / 24 / 1
Регистрация: 23.04.2012
Сообщений: 627
07.09.2021, 10:55  [ТС] 11
Функция N1() это для примера вывода массива на лист. Мне нужно показать значения которые буду во втором массиве.

Что-то ни как не получается объяснить... Давайте совсем просто: есть список элементов, есть переменная, которая должна поочередно принимать значение этих элементов через одну секунду. Есть вторая переменная, она должна принимать значение первой, но уже не через секунду, а через произвольное время.

Например: первая переменная принимает значения 1, 2... 10 через каждую секунду. Вторая переменная принимает показания первой через 1.5 секунды - 2, 4 ... Вот это время 1.5 сек нужно задать переменной, чтобы его можно было менять. Нужно создать второй массив, в котором будут значения второй переменной, которые она будет принимать через вот эти 1.5 сек. Вот и вся задача.

Оффтоп: Я раньше подобную задачу решал на VB за 1 минуту при помощи таймеров. Но это было очень давно... уже и код не вспомню. С JS что-то совсем запутался.
0
Эксперт JS
6492 / 3903 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
08.09.2021, 05:01 12
Javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
        let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; // есть список элементов
        let a; // есть переменная, которая должна поочередно принимать значение этих элементов через одну секунду. 
 
        let b; // Есть вторая переменная, она должна принимать значение первой, но уже не через секунду, а через произвольное время.
        let arr2 = []; // Нужно создать второй массив, в котором будут значения второй переменной, которые она будет принимать через вот эти 1.5 сек. 
        let tik2Step = 1500; // Вот это время 1.5 сек нужно задать переменной, чтобы его можно было менять.
 
        // Служебные переменные
        let i = 0; // Текущий индекс
 
 
 
        setInterval(tick1, 1000);
        setInterval(tick2, tik2Step);
 
        function tick1() {
            a = arr[i++];
            if (i == arr.length) i = 0;
        }
 
        function tick2() {
            arr2.push(a);
            // Тестирование
            document.body.insertAdjacentHTML('beforeend', 'Item: ' + arr2[arr2.length - 1] + '<br/>');
        }
Вывод на экран:
Item: 1
Item: 3
Item: 4
Item: 6
Item: 7
Item: 9
Item: 10
Item: 2
Item: 3
Item: 5
Item: 6
Item: 8
Item: 9
Item: 1
Item: 2
Item: 4
Item: 5
Item: 7
Item: 8
Item: 10
Item: 1
Item: 3
Item: 4
uzlprog, задача то действительно лёгкая. Я не знаю, почему вы запутались.
0
08.09.2021, 05:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.09.2021, 05:01
Помогаю со студенческими работами здесь

Как элементу массива присвоить значение переменной и случайного числа?
как элементу массива присвоить значение переменной и случайного числа. 1) поменять местами первый...

Переменной присвоить значение, равное скалярному произведению векторов
Дана действительная матрица порядка nxn. Переменнойt присвоить значение, равное скалярному...

Переменной присвоить значение, равное скалярному произведению векторов x и y
Дана действительная матрица порядка nxn. Переменнойt присвоить значение, равное скалярному...

Присвоить переменной u значение равное сумме 2 наибольших из 3 чисел
Присвоить переменной u значение равное сумме 2 наибольших из 3 чисел:x,y,z.Напечатать значение u

Присвоить значение переменной, равное сумме элементов строки матрицы
Уважаемые программисты! у меня такая беда,не могу въехать в смысл этой задачи! будьте добры...

Массив: Переменной T присвоить значение, равное скалярному произведению векторов X и Y
Дана вещественная квадратная матрица A. Переменной T присвоить значение, равное скаляр-ному...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru