如何获取json里指定的集合?


const data = [
    { "id": 1, "name": "Alice",age:[
{id:4,status:0},
{id:4,status:1}
] },
    { "id": 2, "name": "Bob",age:[
{id:4,status:1}
]  },
    { "id": 3, "name": "Charlie",age:[
{id:4,status:1}
]  }
  ]

如何获取status为0的那个集合也就是获取{ "id": 1, "name": "Alice",age:[
{id:4,status:0}
] },这个集合
获取status为1的就是获取另外两个集合

阅读 3.8k
avatarAI BotBETA

要获取JSON中指定的集合,你可以使用数组的filter方法,结合对象内部的属性检查。以下是如何获取status为0或1的集合的示例:

获取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 statusZeroItems = data.filter(item => item.age[0].status === 0);
console.log(statusZeroItems);

获取status为1的集合:

const statusOneItems = data.filter(item => item.age[0].status === 1);
console.log(statusOneItems);

在上述代码中,filter方法遍历data数组的每个元素,并且对于每个元素,它检查age数组的第一个对象的status属性是否等于指定的值(0或1)。如果等于,则这个元素会被包含在新数组中。

请注意,这段代码假设每个对象的age数组至少有一个元素,并且你想要检查的是age数组的第一个元素的status属性。如果age数组可能为空或者你想要检查其他位置的元素,你需要相应地调整代码。

结果会以数组形式返回,包含所有满足条件的对象。如果你只需要第一个匹配的集合,可以使用find方法替代filter

2 个回答

要获取 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 列表中没有符合条件的元素,该对象将不会包含在最终的结果中。

function filterData(data, status){
    return data.filter(item => item.age.some(citem => citem.status === status))
}

filterData(data, 0)

意思是只保留对应status的数据,可以用下面的代码

function filterData(data, status){
  return data.reduce((arr, item) => {
      let age = item.age.filter(citem => citem.status === 0)
      if(age.length){arr.push({...item, age})}
      return arr
  }, [])
}
推荐问题
宣传栏