javascript - 通过 AngularJS 删除嵌套 json 对象中的空字符串

标签 javascript angularjs json

我有一个嵌套的 json 对象,我需要在其中删除空值并创建应仅包含数据对象的新 json。 json 文件:

myData = [{
    "id": 1,
    "values": [{
        "value": ""
    }]
}, {
    "id": 2,
    "values": [{
        "value": 213
    }]

}, {
    "id": 3,
    "values": [{
        "value": ""
    }, {
        "value": ""
    }, {
        "value": "abc"
    }]

},{
    "id": 4,
    "values": [{
        "value": ""
    }]
},{
    "id": 33,
    "values": [{
        "value": "d"
    }]
}];

输出应该是:

myNewData = [{
    "id": 2,
    "values": [{
        "value": 213
    }]

}, {
    "id": 3,
    "values": [{
        "value": "abc"
    }]

},{
    "id": 33,
    "values": [{
        "value": "d"
    }]
}];

到目前为止我已经创建了这个:

    angular.module('myapp',[])
    .controller('test',function($scope){
    $scope.myData = [{
        "id": 1,
        "values": [{
            "value": ""
        }]
    }, {
        "id": 2,
        "values": [{
            "value": 213
        }]

    }, {
        "id": 3,
        "values": [{
            "value": ""
        }, {
            "value": ""
        }, {
            "value": "abc"
        }]

    },{
        "id": 4,
        "values": [{
            "value": ""
        }]
    },{
        "id": 33,
        "values": [{
            "value": "d"
        }]
    }];

})
.filter('filterData',function(){
    return function(data) {
        var dataToBePushed = [];
        data.forEach(function(resultData){
            if(resultData.values && resultData.values != "")
                dataToBePushed.push(resultData);
        });
        return dataToBePushed;
    }
});

HTML:

<div ng-app="myapp">
    <div ng-controller="test">
        <div ng-repeat="data in myData | filterData">
            Id:{{ data.id }}
            </br>
            Values: {{ data.values }}
        </div>
    </div>
</div>

我无法访问和删除值对象内的值。现在我只是使用 ng-repeat 显示数据,但我需要为此创建一个新的 json 文件。

最佳答案

您在 AngularJS Controller 中使用数组执行 Array.prototype.map()Array.prototype.filter() 。映射所有对象,执行过滤器以排除具有空值 item.values.value 的项目,然后使用过滤器获取具有以下值的数组元素:

var myData = [{"id": 1,"values": [{	"value": ""}]}, {"id": 2,"values": [{"value": 213}]}, {"id": 3,"values": [{"value": ""}, {"value": ""}, {"value": "abc"}]}, {"id": 4,"values": [{"value": ""}]}, {"id": 33,"values": [{"value": "d"}]}],
    myDataFiltered = myData
      .map(function (item) {
        item.values = item.values.filter(function (itemValue) {
          return itemValue.value;
        });
        return item;
      })
      .filter(function (item) {
        return item.values.length;
      });

console.log(myDataFiltered);
.as-console-wrapper { max-height: 100% !important; top: 0; }

ES6:

myDataFiltered = myData
    .map(item => {
        item.values = item.values.filter(itemValue => itemValue.value);
        return item;
    })
    .filter(item => item.values.length);

关于javascript - 通过 AngularJS 删除嵌套 json 对象中的空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41631816/

相关文章:

c++ - 段错误读取json文件

javascript - postman : How to assert all array elements exist in other array?

javascript - 将我的 'IDs' 动态加载到我的 Backbone Collection 中?

javascript - setTimeout函数依次是0,0,0还要0,1,0怎么办?

javascript - jquery 多个和变化的 id 选择器

jquery - angularjs - 预检响应中的 Access-Control-Allow-Headers 不允许请求 header 字段

jQuery 解析多维数组

javascript - 在 vue 路由器中的两个组件之间传递 Prop

javascript - HTML 表格 - Javascript 选择和取消选择元素(单元格)

javascript - 将选定的 ng-options 字符串化