Чем дробить строку из localstorage, преобразуя её в массив, с помощью split?
Эта строка дополняется пользователями (т.е. значение добавляется сначала в массив, поэтом массив преобразуется в строку, а потом запоминается в localstorage), поэтому она может содержать какие угодно символы. Может быть использовать символ tab? А при внесении записи в localstorage проверять если пользователь ввел символ tab - заменять пробелами. Или ещё идея использовать два пробела, ну а при запоминании ужимать все пробелы до одного. Как лучше?
|
Momon, при формировании строки с разделителем бывает удобно первым символом указывать тот разделитель... ;)
Если он более одного символа можно использовать такую конструкцию <длина_разделителя>,<разделитель><далее_данные_с_тем_разделителем> Алгоритм обработки этого не сложный... - Прочитал число - Взял разделитель - Взял данные - Преобразовал их в массив |
Цитата:
function writeArrayToStorage(name, array) { localStorage[name] = JSON.stringify(array); } function readArrayFromStorage(name) { return eval(JSON.parse(localStorage[name])) } writeArrayToStorage('some', ['-x-private', '50%', '$10', '~~~']); alert(readArrayFromStorage('some')); Конечно же надо проверить поддерживается ли localStorage |
Цитата:
|
Цитата:
var boundary = "===123456===="; Замечу, что число "=" справо и слево не симметрично Иногда удобно вместо цифр использовать дату записи в абсолютном формате |
Цитата:
2. Он типично дольше чем split(), при длине более килобайта, особенно если данные чисто массив, Есть и привередливость Json к корректности, ибо сбой хоть в одном из элементов рушит конструкцию. Типично данных на Storage я к примеру загружаю более 100 кб, меньшие данные удобней подгружать кешированным json скриптом |
Malleys,
Цитата:
var a = [1,2,3]; var str = JSON.stringify(a); alert(str); alert(JSON.parse(str).join(",")) |
Deff,
А почему это количество знаков равно должно быть не одинаково? :blink: Да и такой длинный разделитель будет ведь много места занимать в webstorage, я думал чем короче придумаю разделитель тем лучше. |
Цитата:
|
Я думаю нет необходимости соединять строки массива при помощи какого-то символа, поскольку этот символ может содержаться в строке.
По моему стоит использвать лучше этот символ в качестве соединителя значения ключа localStorage. Например имя массива + символ + индекс строки из массива. Для простоты записи и чтения по такой системе будет хорошо иметь два метода: 1. у массива toLocalStorage для записи и 2. toArray для обратной манипуляций. var LocalStorage = (function() { function LocalStorage(name) { if(!name) throw new Error('Name of storage isn\'t exist'); this.name = name; LocalStorage.Names.push[name]; this.length = parseInt(localStorage[this.name + '.length'] || 0); localStorage[this.name + '.length'] = this.length; } function each(iterator, context) { for(var index = 0; index < this.length; index++) { iterator.call(context, localStorage[this.name + '.' + index], index); } return this; } function push(string) { localStorage[this.name + '.' + this.length++] = string; localStorage[this.name + '.length'] = this.length; return this; } function select(index) { return localStorage[this.name + '.' + index]; } function toArray() { var result = []; this.each(function(string) { result.push(string); }); return result; } LocalStorage.prototype = { each: each, push: push, select: select, toArray: toArray }; LocalStorage.Names = []; return LocalStorage; })(); Array.prototype.toLocalStorage = function(name) { var __localStorage = new LocalStorage(name); for(var i = 0; i < this.length; i++) __localStorage.push(this[i]); return __localStorage; }; /*********************************/ // Метод массива toLocalStorage записывает массив в localStorage var ls = ['Slagt ham! Kristenmands søn har dåret', 'Dovregubbens veneste mø!', 'Slagt ham!', 'Isvand i blodet!'].toLocalStorage('my-dump'); // Метод LocalStorage toArray записывает из хранилища в массив alert(ls.toArray()); Цитата:
|
Часовой пояс GMT +3, время: 01:06. |