Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.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 在地图上迭代,我不';除了数字,我没有钥匙_Javascript_Angularjs - Fatal编程技术网

Javascript 在地图上迭代,我不';除了数字,我没有钥匙

Javascript 在地图上迭代,我不';除了数字,我没有钥匙,javascript,angularjs,Javascript,Angularjs,我有一段Javascript/Angular代码: $scope.validCredentials = { 'a@a.it': 'aaa', 'b@b.com' : 'bbb' }; 我访问此循环中的变量: for ( var k in Object.keys($scope.validCredentials) ) { $log.info("K: " + k); } 我在StackOverflo

我有一段Javascript/Angular代码:

 $scope.validCredentials = {            
        'a@a.it': 'aaa',
        'b@b.com' : 'bbb'
    };
我访问此循环中的变量:

for ( var k in Object.keys($scope.validCredentials) ) {
                $log.info("K: " +  k);
}
我在StackOverflow上读到了另一个问题,Object.keys会返回地图的键,这种情况不知何故发生了,因为Firebug在调试期间正确地给了我两个电子邮件地址

然而,“$log”函数给了我0(或1,取决于循环),当我对照另一个变量检查该值时,0也是代码中稍后使用的值

知道为什么吗?发生了什么事


我已经在firefox和chrome上进行了测试,firebug或开发者工具在调试期间给我提供了电子邮件列表,但日志记录器记录了数字

这与angular无关,当您使用for时,您已经在关键点上迭代,所以只需删除Object.keys调用

var validCredentials = {            
        'a@a.it': 'aaa',
        'b@b.com' : 'bbb'
    };


for ( var k in validCredentials)  {
                console.debug("K: " +  k);
}
这将产生:

K: a@a.it 
K: b@b.com 

您不需要迭代。你错过了一个

var validCredentials={'a@a.it“:‘aaa’,”b@b.com':'bbb'};

console.log(Object.key(validCredentials))循环失败,因为Object.keys()返回数组。看这个

您可以使用标准

var-keys=Object.keys($scope.validCredentials);
var-k;
$log.debug(键);
对于(变量i=0;i
只需添加缺少的“——这不是我需要迭代的问题,因为对于每个键,我都必须执行一些细化。我想这就是我想知道的——让我回到家中测试解决方案。它是有效的。然而,令我惊讶的是,如果我为(anArray中的vari){…}
编写
I
不是数组的内容,而是索引……这是因为您在迭代数组的属性,而不是它包含的项。类似于用其他语言处理反射这是可行的,但我正在寻找一种方法,在javascript中使用
for…in..
构造。是的,原始代码的问题是无法用于。。。在里面用数组构造。并且Object.keys()返回一个数组。实际上,您可以使用它,但您应该知道,对于。。。数组在索引上迭代,而不是在元素上迭代。。。奇怪但真实(我必须做一些其他检查才能完全确定这个说法)你是正确的。你可以用它,但这可能不是个好主意。得到的结果取决于浏览器和数组的初始化方式。有一个很好的答案可以解释这一点
var keys = Object.keys($scope.validCredentials);
var k;

$log.debug(keys);

for (var i = 0; i < keys.length; i++) {
  k = keys[i];

  $log.info("K: " +  k);
  //K: a@a.it
  //K: b@b.com
}