foreach循环

我在AngularJS中经历了forEach循环。有几点我不明白。

>迭代器函数的用途是什么?有没有办法没有它吗?
>键和值的意义如下所示?

angular.forEach($ scope.data,function(value,key){});

PS:我试图运行这个函数没有参数,它没有工作。

这是我的json:

[
   {
     "Name": "Thomas",
     "Password": "thomasTheKing"
   },
   {
     "Name": "Linda",
     "Password": "lindatheQueen"
   }
]

我的JavaScript文件:

var app = angular.module('testModule', []);

app.controller('testController', function($scope, $http){
   $http.get('Data/info.json').then(
      function(data){
         $scope.data = data;
      }
   );

   angular.forEach($scope.data, function(value, key){
      if(value.Password == "thomasTheKing")
         console.log("username is thomas");
   });
});

另一个问题:为什么上面的函数不输入,如果条件和打印“用户名是托马斯”在控制台中?

最佳答案
问题1& 2

所以基本上,第一个参数是要迭代的对象。它可以是一个数组或一个对象。如果是这样的对象:

var values = {name: 'misko', gender: 'male'};

Angular将逐一取每个值,第一个是名称,第二个是gender。

如果你要迭代的对象是一个数组(也是可能的),像这样:

[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
 { "Name" : "Linda", "Password" : "lindatheQueen" }]

Angular.forEach将逐个开始从第一个对象,然后第二个对象。

对于每个这个对象,它将一个接一个,并为每个值执行一个特定的代码。这个代码称为迭代器函数。 forEach是智能的,如果您使用集合的数组,行为不同。这里有一些例子:

var obj = {name: 'misko', gender: 'male'};
var log = [];
angular.forEach(obj, function(value, key) {
  console.log(key + ': ' + value);
});
// it will log two iteration like this
// name: misko
// gender: male

所以key是你的键的字符串值,值是…值。您可以使用键访问您的值,如下所示:obj [‘name’] =’John’

如果这时候你显示一个数组,像这样:

var values = [{ "Name" : "Thomas", "Password" : "thomasTheKing" },
           { "Name" : "Linda", "Password" : "lindatheQueen" }];
angular.forEach(values, function(value, key){
     console.log(key + ': ' + value);
});
// it will log two iteration like this
// 0: [object Object]
// 1: [object Object]

因此,value是你的对象(集合),key是你的数组的索引自:

[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
 { "Name" : "Linda", "Password" : "lindatheQueen" }]
// is equal to
{0: { "Name" : "Thomas", "Password" : "thomasTheKing" },
 1: { "Name" : "Linda", "Password" : "lindatheQueen" }}

我希望它回答你的问题。这里是一个JSFiddle运行一些代码,并测试如果你想要:http://jsfiddle.net/ygahqdge/

调试代码

问题似乎来自事实$ http.get()是一个异步请求。

你发送一个查询你的儿子,那么当浏览器结束下载它执行成功。但是刚刚发送请求后,您使用angular.forEach执行循环,而不等待JSON的答案。

您需要在success函数中包含循环

var app = angular.module('testModule', [])
    .controller('testController', ['$scope', '$http', function($scope, $http){
    $http.get('Data/info.json').then(function(data){
         $scope.data = data;

         angular.forEach($scope.data, function(value, key){
         if(value.Password == "thomasTheKing")
           console.log("username is thomas");
         });
    });

});

这应该工作。

更深入

The 07001 API is based on the 07002 exposed by the $q
service. While for simple usage patterns this doesn’t matter much, for
advanced usage it is important to familiarize yourself with these APIs
and the guarantees they provide.

你可以看看deferred/promise APIs,它是Angular的一个重要概念,使平滑的平行动作。

转载注明原文:foreach循环 - 代码日志