我的对象数组(Json格式)如下所示
var datas = [
{
"Id": "1",
// Here 10 fields
"tests": [
{
"id":"1-1",
"isSelected": true,
},
{
"id":"1-2",
"isSelected": false,
},
]
},
{
"Id": "2",
// Here 10 fields
"tests": [
{
"id":"2-1",
"isSelected": true,
},
{
"id":"2-2",
"isSelected": true,
},
]
},
{
"Id": "3",
// Here 10 fields
"tests": [
{
"id":"3-1",
"isSelected": false,
},
{
"id":"3-2",
"isSelected": false,
},
]
}
]我试着像下面这样
var filteredData = datas.filter( t => t.tests.filter(o => o.isSelected));要用测试获得所有的数据,"isSelected"值的是true,并且不起作用。是否有以下格式的数据。
[
{
"Id": "1",
// Here 10 fields
"t": [
{
"id":"1-1",
"isSelected": true,
}
]
},
{
"Id": "2",
// Here 10 fields
"tests": [
{
"id":"2-1",
"isSelected": true,
},
{
"id":"2-2",
"isSelected": true,
},
]
}
]发布于 2018-11-10 18:55:39
您在正确的轨道上,但是从外部filter回调返回内部filter结果(一个数组)。数组是真实的,所以你保留一切。
您需要分两个步骤处理每个外部对象:
tests,以及tests为空,则将其完全过滤掉。所以:
var filteredData = datas.filter(t => {
t.tests = t.tests.filter(o => o.isSelected);
return t.tests.length !== 0;
});
var datas = [
{
"Id": "1",
// Here 10 fields
"tests": [
{
"id":"1-1",
"isSelected": true,
},
{
"id":"1-2",
"isSelected": false,
},
]
},
{
"Id": "2",
// Here 10 fields
"tests": [
{
"id":"2-1",
"isSelected": true,
},
{
"id":"2-2",
"isSelected": true,
},
]
},
{
"Id": "3",
// Here 10 fields
"tests": [
{
"id":"3-1",
"isSelected": false,
},
{
"id":"3-2",
"isSelected": false,
},
]
}
]
var filteredData = datas.filter(t => {
t.tests = t.tests.filter(o => o.isSelected);
return t.tests.length !== 0;
});
console.log(filteredData);.as-console-wrapper {
max-height: 100% !important;
}
或者如果你真的想要一个简洁的箭头函数:
所以:
var filteredData = datas.filter(t =>
(t.tests = t.tests.filter(o => o.isSelected)).length !== 0
);
var datas = [
{
"Id": "1",
// Here 10 fields
"tests": [
{
"id":"1-1",
"isSelected": true,
},
{
"id":"1-2",
"isSelected": false,
},
]
},
{
"Id": "2",
// Here 10 fields
"tests": [
{
"id":"2-1",
"isSelected": true,
},
{
"id":"2-2",
"isSelected": true,
},
]
},
{
"Id": "3",
// Here 10 fields
"tests": [
{
"id":"3-1",
"isSelected": false,
},
{
"id":"3-2",
"isSelected": false,
},
]
}
]
var filteredData = datas.filter(t =>
(t.tests = t.tests.filter(o => o.isSelected)).length !== 0
);
console.log(filteredData);.as-console-wrapper {
max-height: 100% !important;
}
https://stackoverflow.com/questions/53242296
复制相似问题