要获取 status 为 0 和 1 的集合,可以使用 JavaScript 的数组方法 filter 来进行筛选。下面是具体的实现方法:
获取 status 为 0 的集合
const data = [
{ "id": 1, "name": "Alice", age: [{ id: 4, status: 0 }] },
{ "id": 2, "name": "Bob", age: [{ id: 4, status: 1 }] },
{ "id": 3, "name": "Charlie", age: [{ id: 4, status: 1 }] }
];
const status0 = data.filter(item => item.age.some(a => a.status === 0));
console.log(status0);
获取 status 为 1 的集合
const status1 = data.filter(item => item.age.some(a => a.status === 1));
console.log(status1);
详细解释
filter 方法:filter 方法会创建一个新的数组,包含所有在回调函数中返回 true 的元素。
some 方法:some 方法会测试数组中的某些元素是否至少有一个元素通过了提供的函数测试。它返回一个布尔值。
条件判断:在 filter 的回调函数中,我们使用 some 来检查 age 数组中的每个对象是否满足 status 的条件。
如果:想要在数组中筛选出 age 中包含 status 为 0 或 1 的对象集合,并且每个对象的 age 数组中可能包含多个元素。
可以考虑对 age 数组中的每个元素进行进一步的筛选。
const data = [
{ "id": 1, "name": "Alice", age: [{ id: 4, status: 0 }, { id: 5, status: 1 }] },
{ "id": 2, "name": "Bob", age: [{ id: 4, status: 1 }, { id: 5, status: 2 }] },
{ "id": 3, "name": "Charlie", age: [{ id: 4, status: 1 }, { id: 5, status: 3 }] }
];
// 获取 status 为 0 的集合
const status0 = data.map(item => ({
...item,
age: item.age.filter(a => a.status === 0)
})).filter(item => item.age.length > 0);
console.log(status0);
// 获取 status 为 1 的集合
const status1 = data.map(item => ({
...item,
age: item.age.filter(a => a.status === 1)
})).filter(item => item.age.length > 0);
console.log(status1);
这样的方法可以确保只返回 age 中包含 status 为 0 或 1 的元素,并且如果 age 列表中没有符合条件的元素,该对象将不会包含在最终的结果中。