Я работаю над модулем contacts
моего расширения Google Chrome.Пользователь может добавлять и удалять контакты.Все делается с помощью JavaScript и jQuery.
Этот вопрос больше относится к логике, поэтому не стоит расстраиваться из-за кода.
Это способ добавления контакта.:
function addContact(name){
var n = incContactNum();
chrome.extension.getBackgroundPage().setItem('contact'+n+'', name);
contacts[n] = name;
}
Общее число контактов должно быть увеличено, поэтому теперь у нас есть n
контакты.Кроме того, мы обновляем массив контактов.
Таким образом, таблица элементов SQLite выглядит следующим образом:
------------------------
| key value |
------------------------
| contactNum 3 |
------------------------
| contact1 Test1 |
------------------------
| contact2 Test2 |
------------------------
| contact3 Test3 |
------------------------
При удалении строки, например, строки 2, таблица выглядит так:
------------------------
| key value |
------------------------
| contactNum 2 |
------------------------
| contact1 Test1 |
------------------------
| contact3 Test3 |
------------------------
Как видите, contactNum
уменьшается.Теперь у нас есть два элемента, но второй имеет 3 в качестве индекса, но его следует изменить с contact3 на contact2.Вы можете понять проблему, когда увидите мою функцию удаления:
function removeContact(value){
contacts = new Array(getValue("contactNum"));
for(i = 1; i <= parseInt(getValue("contactNum")); i++){
if(getValue("contact"+i) == value){
chrome.extension.getBackgroundPage().deleteItem("contact"+i);
decContactNum();
break;
}
}
}
Элемент удален по значению.Поэтому я ищу соответствующий индекс для удаления строки.Поскольку число контактов теперь равно 2, индекс 3 никогда не достигается.
Моя идея: первое удаление работает, поэтому после этого необходимо перестроить индексы.От того, что было удалено, уменьшаются все индексы.
Есть идеи, как это сделать?