迭代地图,我不会得到钥匙而是数字

时间:2014-11-09 20:36:11

标签: 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);
}

我在StackOverflow上的另一个问题中读到,Object.keys会返回一个地图的键,这种情况正在发生,因为调试期间的Firebug正确地给了我两个电子邮件地址。

然而" $ log"函数给出0(或1,取决于循环),0也是稍后在代码中使用的值,当我将该值与另一个变量检查​​时。

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

我在firefox上测试了它,chrome,firebug或开发者工具在调试期间给我发送电子邮件列表,但记录器记录了数字。

3 个答案:

答案 0 :(得分:1)

这与angular无关,当你使用时,你已经迭代了键,所以只需删除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 

答案 1 :(得分:0)

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



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

console.log( Object.keys(validCredentials));




答案 2 :(得分:0)

循环失败,因为Object.keys()返回一个数组。请参阅此MDN doc

您可以使用标准For Loop

迭代数组
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
}