迭代json数组字段

时间:2016-04-07 20:47:35

标签: angularjs json

我在使用javascript对JSON对象/字符串中的数组字段进行复选框过滤时遇到问题。

这是我的HTML:

<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>

这是我的数据:

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

原始的jsfiddle基于单项颜色字段,而不是颜色数组。

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

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

这就是 WAS 过滤的方式:

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

    return fruit;
}

我试图像这样过滤:

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

    return fruit;
}

为什么我找不到匹配的任何想法?我想我没有正确扫描阵列?

2 个答案:

答案 0 :(得分:0)

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

此循环逐个返回颜色数组中的项目。

基本上,fruit.color未定义b / c您没有指定要引用的数组中的哪个索引。

换句话说,水果[0]。颜色,水果[1]。颜色等等是有效的。

答案 1 :(得分:0)

你的代码对我来说并不适用,但这至少可以让我在每个水果中打印颜色:

$scope.colourFilter = function(f) {

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


    });

}