Javascript Angular.forEach不返回对象中的最后一项
注释代码返回两个元素的数组,而简单的“for in”循环返回localStorage对象的所有值(实际上有三个项) 我不明白为什么angular.forEach不迭代对象中的最后一项 根据文件,一切都应该正常Javascript Angular.forEach不返回对象中的最后一项,javascript,angularjs,loops,foreach,Javascript,Angularjs,Loops,Foreach,注释代码返回两个元素的数组,而简单的“for in”循环返回localStorage对象的所有值(实际上有三个项) 我不明白为什么angular.forEach不迭代对象中的最后一项 根据文件,一切都应该正常 以下是我在调试中发现的内容 因为您已经设置了LoalSturt作为整数的键(虽然它将被保存为字符串),但是对于像jQuery和S角这样的库,它们会把它看作是数字,并在对象的特定对象上迭代它。(在你的情况下,这里有3个。) 通过使用jQuery()打印所有值,它将0也作为输出,并且它的值是未
以下是我在调试中发现的内容 因为您已经设置了
0
也作为输出,并且它的值是未定义的。所以迭代将在2结束
因此angular正在使用jQlite,因此它将输出相同的结果。
在这里,通过将localStorage
的第一个值设置为0
将解决这个问题
使用角度传感器工作:使用jQuery: 或 您可以将任何字母表附加到键 更新: 在调试jquerymore之后,我发现
isArrayLike
函数导致了这个问题。因为此函数为localStorage
返回true,其中键是数字的,因此它将从循环开始,直到达到其长度,并在其上迭代。所以最后一个属性不会执行
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;
if(类isArrayLike(obj)){
长度=对象长度;
对于(;ilocalStorage.hasOwnProperty(key)
是否为所有元素返回true?您可以组合一个JSFIDLE或plunkr吗?实际上,代码工作得非常好。检查是否存在任何其他问题这里是我的localStorage i.imgur.com/j7GocsN.jpg这里我在这里迭代的控制台键这里是控制台OP是对的,只有当localStorage将整数作为键时,它才迭代2。或者使用Object.Keys
,它就是为Object.Keys(localStorage).forEach(x=>console.log(x))
设计的。编辑:我不是故意贬低你的答案(听起来很糟糕)。这是一项很好的研究。我已经看到了,毫无疑问它会起作用的。我已经测试了lodash
即使与一起使用也能工作。forIn
有很多方法可以实现这一点。谢谢你指出这一点。
if ( isArrayLike( obj ) ) {
length = obj.length;
for ( ; i < length; i++ ) {
if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
break;
}
}
}