Как я могу установить уникальную переменную для каждого элемента в массиве с помощью javascript?

Я хочу установить метку времени для каждого числа, а затем проверить метку времени каждого номера на себя.

        var timestamp;
        nums=["1", "2", "3"];
        nums2=nums.map(myFunction);


        function myFunction(num) {

          setInterval(function() {

            var current_time = Math.floor(Date.now() / 1000);

            if (typeof timestamp !== "undefined" ) {
                if (current_time > (timestamp + 60)) {
                    timestamp = Math.floor(Date.now() / 1000);
                    console.info('time stamp reset');
                } else {
                    console.info('time stamp too young will reset after 60 sec');
                }
            } else {
                timestamp = Math.floor(Date.now() / 1000);
                console.info('time stamp set');
            }

         }, 10000);

        }

**** Если я запускаю скрипт на 20 секунд: ****

токовый выход:

time stamp set

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

*(10 seconds later)*

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

желаемый результат:

time stamp set

time stamp set

time stamp set

*(10 seconds later)*

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

time stamp too young will reset after 60 sec

Я немного смущен тем, чего вы пытаетесь достичь. С учетом того, как вы это делаете сейчас, невозможно, чтобы он работал в течение 20 секунд ... потому что он будет проходить через ваш массив примерно за 1 мс ...

kemicofa ghost 09.01.2019 23:34

Вы хотите запустить сценарий дважды с интервалом в 10 секунд?

Thomas Sablik 09.01.2019 23:37

Согласен, сейчас это ничего не дает. Вы пытаетесь перейти с ["1"."2"."3"] на [["1",timestamp],["2",timestamp],["3",timestamp]] или, возможно, на [{"1",timestamp},{"2",timestamp},{"3",timestamp}]

Bibberty 09.01.2019 23:53

@kemicofa Я изменил свой код, чтобы отразить результат. Я также отредактировал свой вывод.

TrimTrimm 10.01.2019 00:05

Функцию map следует использовать только для создания второго массива преобразованных элементов. Используйте forEach для итерации.

Heretic Monkey 10.01.2019 00:09

@ThomasSablik, пожалуйста, обратитесь к моему обновленному коду.

TrimTrimm 10.01.2019 00:13
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
121
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не понимаю, что вы здесь пытаетесь сделать, поэтому мой ответ полностью основан на ваших текущий выход и желаемый результат.

Ваша переменная timestamp объявлена ​​в области видимости global, поэтому при первом вызове myFunction ее значение будет undefined, но при последующих вызовах она будет содержать какое-то значение, что приведет к вашему «текущему выходу».

Чтобы исправить это, переместите переменную timestamp внутрь myFunction.

nums=["1", "2", "3"];
nums2=nums.map(myFunction);


function myFunction(num) {
  var timestamp;

  setInterval(function() {

    var current_time = Math.floor(Date.now() / 1000);

    if (typeof timestamp !== "undefined" ) {
        if (current_time > (timestamp + 60)) {
            timestamp = Math.floor(Date.now() / 1000);
            console.info('time stamp reset');
        } else {
            console.info('time stamp too young will reset after 60 sec');
        }
    } else {
        timestamp = Math.floor(Date.now() / 1000);
        console.info('time stamp set');
    }

 }, 10000);

}

Использование генераторов функций и setInterval

const data = [];
//populate data
for(let i = 0; i < 3; i++){data.push(i)}

function * gen(){
  const timestamp = Date.now();
  let currentTimestamp;
  do{
     currentTimestamp = yield Date.now();
  }while(currentTimestamp - timestamp < 60000);
  return;
}

function run(){
  let iter = gen();
  let t = null;
  let i = 0;
  const res = [];
  const si = setInterval(function(){
    const {done,value} = iter.next(t);
    if (done){
      console.info("60 seconds have gone... reseting...")
      iter = gen();
      //reseting
      i = res.length = 0;
      
    }
    t = value;
    if (i >= data.length){
      console.info("waiting...");
      return;
    }
    console.info("Set timestamp");
    const d = [data[i], value];
    console.info(d);
    res[i++] = d;
  }, 1000);
}

window.onload = run;

Другие вопросы по теме