我有如下对象数组(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,
},
]
}
]
您走在正确的轨道上,但您正在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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句