Расширение объекта Storage является прекрасным решением. Для моего API я создал фасад для localStorage, а затем проверяю, является ли это объектом или нет при настройке и получении.
var data = {
set: function(key, value) {
if (!key || !value) {return;}
if (typeof value === "object") {
value = JSON.stringify(value);
}
localStorage.setItem(key, value);
},
get: function(key) {
var value = localStorage.getItem(key);
if (!value) {return;}
// assume it is an object that has been stringified
if (value[0] === "{") {
value = JSON.parse(value);
}
return value;
}
}
Нет причины, по которой ваш код не должен работать для индекса 0
, кроме как для теста index > 0
. Удаляя это, оно должно работать нормально:
bool _sameUser () {
assert(index >= 0);
assert(map != null);
return map[index + 1] != null && map[index + 1]['fromUser'] == map[index]['fromUser'];
}
Поскольку я предположил, что index
никогда не должно быть меньше, чем 0
, а map
никогда не должно быть null
, я переместил некоторые из код условия для assert
операторов. Кроме того, поскольку ваше if
-выражение является логическим, вы можете просто вернуть его напрямую.