2016-07-06 77 views
0

in angularjs modal我试图显示所有具有级别4,但我只有一个类。请我应该如何改变我可以为了得到所有的类javascript/angularjs通过数组循环显示只有一个对象

$scope.openClass = function (classes) { 
    $log.info("classes",classes); 
    var modalInstance = $modal.open({ 
     templateUrl: 'classes.html', 
     controller: 'ModalClassInstanceCtrl', 
     resolve: { 
      info: function() { 
       var info = {}; 
       for (var i=0;i<classes.length;i++){      
        if (classes[i].level==4){       
         info['name']= classes[i].name; 
         $log.info("classinfo",info);        
        } 
       }     
       $log.info(info); 
       return info; 
      } 
    } 
}); 

在$登录,如果for循环显示我只有一个后病情告诉我,他们两个在我的情况下,写入类,但在$日志

+2

首先,你应该在你的'为'循环。没有它,它会假设'我是一个全局变量。如果在脚本中使用另一个名为'i'的变量,则会产生一些意想不到的结果。 –

+0

而且它不断覆盖这段代码中的info ['name'],所以你只会得到1个结果。 – Matheno

+0

我已经添加了var到我的,但我怎么能防止它覆盖,我试图用break;但它只是在对象之后中断,并且永远不会继续 – george

回答

1

你可以使用filter方法,如下:

var filteredArray = classes.filter(function(value) { 
    return value.level == 4; 
)); 

它后,如果您想采摘仅这些项目的名称,你可以做到以下几点:

var names = filteredArray.map(function(obj) { 
    return obj.name; 
} 

如果您经常会这样做,你可以编写一个这样抽象出地图的函数:

function pluck(array, key) { 
    return array.map(function(item) { 
    return item[key]; 
    }); 
} 
+0

谢谢developer033 filteredArray是我想要感谢的 – george

0

我认为,你重写你参数 “名”

info['name']= classes[i].name; 

如果你想收藏,你应该

var info = []; 
info.push(classes[i].name)