Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular.forEach不返回对象中的最后一项_Javascript_Angularjs_Loops_Foreach - Fatal编程技术网

Javascript Angular.forEach不返回对象中的最后一项

Javascript Angular.forEach不返回对象中的最后一项,javascript,angularjs,loops,foreach,Javascript,Angularjs,Loops,Foreach,注释代码返回两个元素的数组,而简单的“for in”循环返回localStorage对象的所有值(实际上有三个项) 我不明白为什么angular.forEach不迭代对象中的最后一项 根据文件,一切都应该正常 以下是我在调试中发现的内容 因为您已经设置了LoalSturt作为整数的键(虽然它将被保存为字符串),但是对于像jQuery和S角这样的库,它们会把它看作是数字,并在对象的特定对象上迭代它。(在你的情况下,这里有3个。) 通过使用jQuery()打印所有值,它将0也作为输出,并且它的值是未

注释代码返回两个元素的数组,而简单的“for in”循环返回localStorage对象的所有值(实际上有三个项)

我不明白为什么angular.forEach不迭代对象中的最后一项

根据文件,一切都应该正常
以下是我在调试中发现的内容

因为您已经设置了LoalSturt作为整数的键(虽然它将被保存为字符串),但是对于像jQuery和S角这样的库,它们会把它看作是数字,并在对象的特定对象上迭代它。(在你的情况下,这里有3个。)

通过使用jQuery()打印所有值,它将
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)){
长度=对象长度;
对于(;i
localStorage.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;
                }
            }
        }