var items = [];
//angular.forEach(localStorage, function(value, key){
// items.push({
// 'id' : key,
// 'text' : value
// });
// console.log(value);
//});
for(var key in localStorage){
if(localStorage.hasOwnProperty(key)){
//console.log(localStorage[row]);
items.push({
'id' : key,
'text' : localStorage[key]
});
}
}
return items;
注释代码返回两个元素的数组,而简单的“for in”循环返回localStorage对象的所有值(实际上有三个项目)。
我不明白为什么地狱angular.forEach不会迭代对象中的最后一项?
根据文档,一切都应该没问题 https://docs.angularjs.org/api/ng/function/angular.forEach
答案 0 :(得分:3)
这是我从调试中发现的内容。
由于您已将localStorage
的键设置为整数(尽管它将保存为字符串),但对于像jQuery和Angular这样的库,它们会将其视为数字,并将在对象上迭代该特定大小的宾语。 (在你的情况下这里有3个。)
通过使用jQuery(https://jsfiddle.net/9n4btgob/)打印所有值,它也将0
作为输出,并且它的值未定义。所以迭代将在2点结束。
因此,角度使用jQlite,因此它将输出相同的结果。 https://jsfiddle.net/hru2k47u/
通过将localStorage
的第一个值设置为0
,可以解决问题。
使用角度:https://jsfiddle.net/hru2k47u/1/
使用jQuery:https://jsfiddle.net/9n4btgob/2/
你可以在键上附加任何字母。
调试jQuery之后,我发现isArrayLike
函数导致了问题。因为对于键是数字的localStorage
,此函数返回true,因此它将开始循环直到它的长度并迭代它。所以Last属性不会执行。
if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
}