2016-04-07 20 views
0

JSA nesnesi/dizesi içindeki bir dizi alanını javascript'te filtreleyen onay kutusu ile sorun yaşıyorum.iterate json array alanı

İşte benim HTML: Orijinal jsfiddle tek bir öğe renkler alanın, renk değil, bir dizi kapalı dayanıyordu

$scope.fruit = [ 
     {'name': 'Apple', 'colour': ['Red']}, 
     {'name': 'Orange', 'colour': ['Red','Orange']}, 
     {'name': 'Banana', 'colour': ['Yellow','Orange']}]; 

:

<div ng-app="fruit"> 
    <div ng-controller="FruitCtrl"> 

     <input type="checkbox" ng-click="includeColour('Red')"/> Red</br/> 
     <input type="checkbox" ng-click="includeColour('Orange')"/> Orange</br/> 
     <input type="checkbox" ng-click="includeColour('Yellow')"/> Yellow</br/> 

     <ul> 
      <li ng-repeat="f in fruit | filter:colourFilter"> 
       {{f.name}} 
      </li> 
     </ul> 

     Filter dump: {{colourIncludes}} 
    </div> 
</div> 

İşte benim veridir.

original: 
{'name':'Apple','colour':'Red'} 

my version: 
{'name':'Apple','colour':['Red','Yellow']} 

Ve bu süzülmüş WAS nasıl:

$scope.colourFilter = function(fruit) { 
    if ($scope.colourIncludes.length > 0) { 
    var data = fruit.colour; 
     if ($.inArray(fruit.colour, $scope.colourIncludes) < 0) 
      return; 
    } 

    return fruit; 
} 

ben şöyle filtrelemek çalışıyorum:

Herhangi fikirleri eşimi bulamıyorum neden olarak? Sanırım dizileri düzgün bir şekilde taramıyorum?

+0

aslında, sorun veri değişkenle olduğunu. – jmugz3

+0

Yani veri dizisi yapmam doğru değil mi? Renk dizisi tanımında sanırım? –

+0

cevabıma bak. – jmugz3

cevap

0
for (var i in fruit){ 
    fruit[i].colour.forEach(function(color){ 
     console.log(color); 
    }); 
} 

Bu döngü, renk dizisindeki öğeleri tek tek gönderir.

Temel olarak, fruit.color undefined b/c, dizinde hangi dizini başvurmak istediğinizi belirtmiyorsunuz. Diğer bir deyişle, meyve [0] .renk, meyve [1] .colour ... vb. Geçerlidir.

+0

'angular.forEach()' bir nesneyi yinelemek için daha iyi bir yol olacaktır. – Roy

0

Kodunuz oldukça benim için işe yaramadı, ama bu en azından bana her meyvede renkleri yazdırmak sağlar:

$scope.colourFilter = function(f) { 

     angular.forEach(f.colour, function(color){ 
     console.log("Color is: "+color); 


    }); 

}