首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >angularjs中的foreach循环

angularjs中的foreach循环
EN

Stack Overflow用户
提问于 2015-04-30 03:49:37
回答 5查看 568.2K关注 0票数 112

我正在浏览AngularJSforEach loop。关于它,有几点我是不理解的。

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

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

PS:我试图在没有参数的情况下运行这个函数,但它不起作用。

这是我的json

代码语言:javascript
复制
[
   {
     "Name": "Thomas",
     "Password": "thomasTheKing"
   },
   {
     "Name": "Linda",
     "Password": "lindatheQueen"
   }
]

我的JavaScript文件:

代码语言: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");
   });
});

另一个问题:为什么上面的函数没有进入if条件,并在控制台打印"username is thomas“?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-04-30 03:53:52

问题1和2

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

代码语言:javascript
复制
var values = {name: 'misko', gender: 'male'};

Angular将逐一获取每个值,第一个值是姓名,第二个值是性别。

如果要迭代的对象是一个数组(也可以),如下所示:

代码语言:javascript
复制
[{ "Name" : "Thomas", "Password" : "thomasTheKing" },
 { "Name" : "Linda", "Password" : "lindatheQueen" }]

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

对于每个对象,它将逐个获取它们,并为每个值执行特定的代码。这段代码称为迭代器函数。如果您使用的是集合的数组,则forEach是智能的,并且具有不同的行为。下面是一些例子:

代码语言:javascript
复制
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是key的字符串值,value是...值。您可以使用密钥访问您的值,如下所示:obj['name'] = 'John'

如果这次显示一个数组,如下所示:

代码语言:javascript
复制
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是数组的索引,因为:

代码语言:javascript
复制
[{ "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的回答。

您需要将循环包含在成功函数中

代码语言:javascript
复制
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");
         });
    });

});

这应该是可行的。

更深入地了解

$http应用编程接口基于$q服务公开的deferred/promise APIs。虽然对于简单的使用模式,这并不重要,但对于高级使用,熟悉这些API及其提供的保证是很重要的。

你可以看看deferred/promise APIs,它是Angular的一个重要概念,让异步动作变得流畅。

票数 209
EN

Stack Overflow用户

发布于 2016-09-09 15:57:08

你必须为JSON使用嵌套的angular.forEach循环,如下所示:

代码语言:javascript
复制
 var values = [
        {
            "name":"Thomas",
            "password":"thomas"
        },
        { 
            "name":"linda",
            "password":"linda"
        }];

    angular.forEach(values,function(value,key){
        angular.forEach(value,function(v1,k1){//this is nested angular.forEach loop
            console.log(k1+":"+v1);
        });
    });
票数 7
EN

Stack Overflow用户

发布于 2017-09-12 00:05:31

angular.forEach()将遍历您的json对象。

第一次迭代,

密码密钥= 0,值={“

”:"Thomas","password“:"thomasTheKing"}

第二次迭代,

密码密钥= 1,值={“

”:"Linda",“”:"lindatheQueen“}

要获取name的值,可以使用value.namevalue["name"]。与您的password相同,您可以使用value.passwordvalue["password"]

下面的代码将为您提供所需的内容:

代码语言:javascript
复制
   angular.forEach(json, function (value, key)
         {
                //console.log(key);
                //console.log(value);
                if (value.password == "thomasTheKing") {
                    console.log("username is thomas");
                }
         });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29953198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档