дублирование данных локального хранилища javascript через массив

#javascript #arrays #object #local-storage

#javascript #массивы #объект #локальное хранилище

Вопрос:

Я создаю планировщик задач на рабочий день. Я могу извлекать свои данные из localstoage. Теперь я пытаюсь выполнить итерацию по массиву объектов, и если этот идентификатор совпадает, извлеките эти данные. У каждого объекта есть 2 свойства: час и описание. Я использую hour в качестве уникального идентификатора. Когда я извлекаю данные из localstorage, они дублируют данные объекта таргетинга в каждой текстовой области.

Как мне просто отобразить его в текстовой области только с соответствующим идентификатором?

Вот область кода, которая, как я думаю, вызывает у меня проблему

 for ( var i = 0; i < timeBlockArr.length; i  ) {

  var timeBlockId = $(".time-block").attr("id");
  if(timeBlockArr[i].hour === timeBlockId) {    
    $(".time-block .description").val(timeBlockArr[i].description);
  }
}
 

и скрипка js рабочего проекта https://jsfiddle.net/j9hepL2b /

Ответ №1:

Вы перебираете свои объекты localStorage, поэтому на значение timeBlockId элемента localStorage, который вы обрабатываете в данный момент, не влияет.

В этой строке $(".time-block") находится массив ваших элементов с time-block классом.

 var timeBlockId = $(".time-block").attr("id");
 

Но .attr() метод jQuery возвращает только идентификатор первого элемента в этом массиве. Из документов:

Метод .attr() получает значение атрибута только для первого элемента в сопоставленном наборе.

Поэтому: console.log(timeBlockId) всегда "hour-9" .

Если я понимаю, что вы пытаетесь сделать, вам вообще не нужно if это утверждение. Попробуйте это:

 for ( var i = 0; i < timeBlockArr.length; i  ) {

    const selector = '#'   timeBlockArr[i].hour   ' .description';

    $(selector).val(timeBlockArr[i].description);
  
}
 

Т.е. Вы выбираете элемент с классом .description (textarea), который является потомком элемента с идентификатором #hour-9 и т.д., #hour-10 и изменяете значение этого текстового поля с .val() помощью .