我有一个像这样的简单数组:
const test = [{
test: 1,
key: [{
yes: true,
no: null
},{
yes: true,
no: null
},{
yes: false,
no: null
}]
},
{
test: true,
key: [{
yes: true,
no: null
}]
},
{
test: null,
key: [{
yes: null,
no: null
}]
}
];
我想返回一个仅包含test
为真(例如1)的项目的数组。并且key
内的test
数组将仅包含具有key.yes
真实值的对象。
所以预期的输出是:
[
{
test: 1,
key: [{yes: true, no: null},{yes: true, no: null}]
},
{
test: true,
key: [{yes: true, no: null}]
}
];
我试图通过使用像这样的简单过滤器来实现这一目标:
const filtered = test.filter(obj => obj.test && obj.key.filter(item => item.yes).length > 0)
,但这还会返回key
数组的值false
。
有什么想法吗?
答案 0 :(得分:2)
您需要获得一个新的外部数组和新的内部数组,因为外部过滤不会更改内部数组。如果要对内部数组进行突变并过滤外部数组,则对给定的数据进行突变。
要获得独立结果,您可以检查@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// retrieve your variable value here
}
以及是否为真过滤器test
并为结果集获取一个新对象。
key
var test = [{ test: 1, key: [{ yes: true, no: null }, { yes: true, no: null }, { yes: false, no: null }] }, { test: true, key: [{ yes: true, no: null }] }, { test: null, key: [{ yes: null, no: null }] }],
result = test.reduce((r, { test, key }) => {
if (test) {
r.push({ test, key: key.filter(({ yes }) => yes) });
}
return r;
}, []);
console.log(result);
答案 1 :(得分:0)
您还必须过滤每个单独的cat /etc/dnsmasq.d/*
数组。
key
答案 2 :(得分:0)
您应该首先过滤主数组,然后重新映射到新的过滤子数组,例如:
const filtered = test
.filter(obj => obj.test && obj.key.some(item => item.yes))
.map(d => {d.test, key: d.key.filter(item => item.yes));
或者可能是通过键过滤数组。稍后会是:
const filtered = test
.filter(obj => obj.test)
.map(d => {d.test, key = d.key.filter(item => item.yes))
.filter(s => s.key);