увеличение id ++ и сохранение нового увеличенного значения, чтобы его можно было снова вызывать и увеличивать - PullRequest
0 голосов
/ 02 июня 2019

Значения добавляются в объект с ключами (значения ввода, только ключ для идентификатора является переменной, определенной в js.file.

При запуске значение идентификатора установлено равным 0 (id = 0), теперь янужно найти способ, как увеличить идентификатор без сброса его до заданного значения 0.

Итак, я сделал так, что при увеличении новое значение (id) помещается в объект, а затем объект помещается вмассив (со всеми входными значениями и значением идентификатора, который затем помещается в основное localStorage), а затем новое значение (увеличенный идентификатор) сохраняется в localStorage (только для идентификаторов).

Теперь проблема в том, что каждый новыйщелчок требует, чтобы я получил доступ к localStorage идентификаторов и выбрал его для статистики, чтобы получить значения из него (каждый раз, когда я создаю новый идентификатор, это увеличивает длину массива, поэтому при щелчке я застреваю в бесконечном цикле.

Мне нужен способ вставить увеличенный идентификатор в основной массив (все значения), но в то же время получить доступ к последнему значению увеличенного идентификатора, чтобы его можно было снова увеличивать.

Извините за мой плохой английскийиш язык и плохое объяснение

let testObjectOne = {
  //'title' is key and $title.val() is value of that key
  'title': $title.val(), 
  'typ': $typ.val(),
  'assign': $assign.val(),
  'files': $file.val().match(/[\/\\]([\w\d\s\.\-\(\)]+)$/)[0],
  'priority': $priority.val(),
  'category': $category.val(),
  'textField': $textField.val(),
  'end_date': $date.val(),
  'id':id,
};

let id = 0;
let array_id = [];
array_id.push(id);
let string_array_id = JSON.stringify(array_id);
localStorage.setItem('id' , string_array_id);

let savedId = localStorage.getItem('id'),
    array_savedId = JSON.parse(savedId);  
console.log(savedId);
console.log(array_savedId);

//looping id array 
for (let k = 0; k < array_savedId.length; k++){
  console.log(array_savedId[k]);
  //increments 0 to 1 , later on increments 0 to 1 and 1 to 2 and so on
  let newValue = array_savedId[k] + 1;
  //checks if new value is not matching to values in array 
  if (newValue !== array_savedId[k]){
    //then pushes new value into array creating new index
    array_savedId.push(newValue);
    //id inside testObjectOne is set to new value
    testObjectOne['id'] = newValue;
    //pushing testObjectOne into main array 
    let save_newValue_withID = localStorage.getItem('key'),
        array_s_nV_wID = JSON.parse(save_newValue_withID);
    array_s_nV_wID.push(testObjectOne);
    let string_newValue_withID =JSON.stringify(array_s_nV_wID);
    localStorage.setItem('key' , string_newValue_withID);
  }
}

let test = localStorage.getItem('key'), 
    array_test = JSON.parse(test);
array_test.push(testObjectOne);
let back_to_string = JSON.stringify(array_test);   
localStorage.setItem('key', back_to_string);

Ответы [ 2 ]

0 голосов
/ 03 июня 2019
let testObjectOne = {
            'title': $title.val(),
            'typ': $typ.val(),
            'assign': $assign.val(),
            'files': $file.val().match(/[\/\\]([\w\d\s\.\-\(\)]+)$/)[0],
            'priority': $priority.val(),
            'category': $category.val(),
            'textField': $textField.val(),
            'end_date': $date.val(),
            'id': 0,
        };
        if (localStorage.getItem('key') === null) {
            localStorage.setItem('id', "0");
            let temp_Array = [];
            temp_Array.push(testObjectOne);
            localStorage.setItem('key', JSON.stringify(temp_Array));
        } else {
            let id_value = localStorage.getItem('id');
            let temp_array = JSON.parse(localStorage.getItem('key'));
            id_value++;
            testObjectOne['id'] = id_value;
            temp_array.push(testObjectOne);
            localStorage.setItem('key', JSON.stringify(temp_array));
            localStorage.setItem('id', id_value);
        }
0 голосов
/ 02 июня 2019

В вашем случае кажется, что вам нужно хранить 2 массива.

  1. Основной массив, в котором хранятся объекты
  2. Поддерживающий массив хранит только идентификаторы объектов.

Из того, как вы структурируете свой цикл, где делаете цикл array_savedId, а также добавляете в него новый элемент во время цикла, вы застрянете в бесконечном цикле.

//looping id array 
for (let k = 0; k < array_savedId.length; k++){
   // somewhere in the loop, you are adding item into the array,
   // this is the recipe for infinite loop
   array_savedId.push(newValue);
}

Если вам просто нужен уникальный идентификатор для объектов, вы можете просто получить последний объект и увеличить идентификатор.Совсем не нужно зацикливать массив.

// Load the object array
let save_newValue_withID = localStorage.getItem('key')
let array_s_nV_wID = JSON.parse(save_newValue_withID);

if (array_s_nV_wID.length == 0) {
  // Empty array, so we are adding first item
  testObjectOne['id'] = 1;
}
else {
  // Find the last object, increment the id
  let lastItem = array_s_nV_wID[array_s_nV_wID.length - 1]
  testObjectOne['id'] = lastItem['id'] + 1
}

// Save to storage
array_s_nV_wID.push(testObject) // <-- We will need this again later
let string_newValue_withID = JSON.stringify(array_s_nV_wID);
localStorage.setItem('key' , string_newValue_withID);

Теперь мы закончили с основным массивом, давайте поработаем с массивом идентификаторов.Во избежание рассинхронизации массива 2 по таким причинам, как то, что мы забываем обновлять массив ids при добавлении / удалении / редактировании основного массива, и мы продолжаем работу с несинхронизированным массивом, мы просто перестроим массив ids на основена последних значениях основного массива

const newIdsArray = array_s_nV_wID.map(a => a.id)
localStorage.setItem('id' , newIdsArray);

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