angularjs - 当对象分配了多个 json 对象时无法过滤
问题描述
我的角度控制器中有一个如下所示的对象。
$scope.updatedList = [
[
{
"sId":100,
"s1":12,
"s2":1,
"s3":3,
"spread":"21x",
"owner":"Michael",
"labels":"deffered incomplete"
}
],
[
{
"sId":3432,
"s1":1,
"s2":10,
"s3":20,
"spread":"34",
"owner":"Taillor",
"labels":"complete"
},
{
"sId":4000,
"s1":8,
"s2":2,
"s3":3,
"spread":"332",
"owner":"Shan",
"labels":"complete deffered"
}
],
[],
[]
];
我正在尝试从 JSON 对象($scope.updatedList)中过滤列表。下面是 js 代码,如果属性标签有 defered 一词,我试图仅显示来自 json 对象的元素。
演示:https ://plnkr.co/edit/37bnDR1fkNXYBcBP6vEW?p=preview
$scope.showList = function(){
console.log("showList " + JSON.stringify($scope.updatedList));
$scope.defferedList = $scope.updatedList.filter(function(obj) {
console.log(obj.labels && obj.labels.includes('deffered'));
return obj.labels && obj.labels.includes('deffered');
});
};
PS:$scope.updatedList
有多个用逗号分隔的json对象定义为一个对象。
--EDIT--- 预期输出:
我想从不包含“defered”一词$scope.updatedList
的属性“ ”中删除元素。lables
$scope.defferedList = [[{"sId":100,"s1":12,"s2":1,"s3":3,"spread":"21x","owner":"Michael","labels":"deffered incomplete"}],[{"sId":4000,"s1":8,"s2":2,"s3":3,"spread":"332","owner":"Shan","labels":"complete deffered"}],[],[]];
在 $scope.deferedList 中,我删除了 $scope.updatedList 的标签属性中没有“defered”一词的元素。
解决方案
可能有一种更优雅的方式来执行此操作,但这会将您的预期输出放入$scope.defferedList
属性中:
$scope.showList = function(){
$scope.defferedList = [];
$scope.updatedList.forEach(function(item) {
$scope.defferedList.push(
item.filter(function(subItem) {
return subItem.labels.includes('deffered');
})
);
});
};
推荐阅读
- ms-word - 在 Word 文档中嵌入 visio 图会在右侧和底部添加填充(2019)
- python - IPython notebook:使用引号(')和美元($)将字符串变量作为参数传递给命令行中的python脚本(!)| 例如:abc.py -arg1 '$var1'
- python - 在 Ubuntu 18.04 上上传带有 Selenium 和 Python 的图像
- angular - angular - 如何将订阅与 HTTP 本机库请求一起使用?
- android - 使用 AlarmManager 时后台活动被阻止。(Android Q 隐私变更)
- c - 我如何使用 For 循环初始化值 start 取决于条件 for(k = (Char[i] == ' '? i - 1 : i ); j