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
最佳答案
这是我从调试中发现的。
由于您已将 localStorage
的键设置为整数(尽管它会被保存为字符串)但是对于像 jQuery 和 Angular 这样的库,它们会将其视为数字并为此遍历对象对象的特定大小。 (这里是 3 个。)
通过使用 jQuery ( https://jsfiddle.net/9n4btgob/ ) 打印所有值,它也给我 0
作为输出,它的值是未定义的。所以迭代将在 2 结束。
因此 angular 使用的是 jQlite,所以它会输出相同的结果。 https://jsfiddle.net/hru2k47u/
这里通过将 localStorage
的第一个值设置为 0
将解决问题。
使用 Angular :https://jsfiddle.net/hru2k47u/1/
使用 jQuery:https://jsfiddle.net/9n4btgob/2/
或
您可以将任何字母附加到键上。
更新:
在调试 jQuery more 之后,我发现 isArrayLike
函数导致了这个问题。因为此函数为键为数字的 localStorage
返回 true,因此它将开始 for 循环直到它的长度并迭代它。所以 Last 属性不会执行。
if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
}
关于javascript - Angular.forEach 不返回对象中的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37744935/