JS数组对象复杂分类操作问题

有这样一个数组对象,希望能够根据hobby项的数组输出分类后的数组对象,这个应该比简单的根据某个字段分类要有难度呢,后者直接filter一句代码就可以搞定,这个的话就不行了

const data = [
  {
    id:1,
    name:"张三"hobby:['吃饭''睡觉']
  },
  {
    id:2 ,
    name:"李四"hobby:['吃饭']
  },
  {
    id:3,
    name:"王五"hobby:['睡觉']
  },
  {
    id:1,
    name:"赵六"hobby:[]
  }
]

希望能分别根据传入的参数“吃饭”或“睡觉”输出:吃饭的

list1 = [
{
    id:1,
    name:"张三"
  },
  {
    id:2 ,
    name:"李四"
  },
]

和睡觉的,应该怎么操作呢?

list2 = [
  {
     id:1,
    name:"张三"
  },
  {
    id:3,
    name:"王五"
  }
]

还是用filter就行
根据传入的参数用filter筛选再map重组下输出就行


function filterByHobby(data, hobby) {
  return data.filter(item => item.hobby.includes(hobby))
             .map(item => ({ id: item.id, name: item.name }));
}

const list1 = filterByHobby(data, '吃饭');
const list2 = filterByHobby(data, '睡觉');

【以下回答由 GPT 生成】

首先,我会使用filter方法来筛选出包含传入参数的数组对象。具体步骤如下:

  1. 创建一个空数组,用于存储分类后的数组对象。
  2. 使用filter方法遍历data数组,对每个对象进行筛选。
  3. 在每个对象的hobby字段中使用includes方法判断传入参数是否包含在其中。
  4. 如果找到匹配的对象,将其idname字段存入新数组中。
  5. 返回分类后的数组对象。

下面是具体的代码实现:

function classifyByHobby(data, hobby) {
  const list = [];

  data.filter(obj => obj.hobby.includes(hobby))
    .forEach(obj => {
      list.push({
        id: obj.id,
        name: obj.name
      });
    });

  return list;
}

通过调用classifyByHobby函数,并传入相应参数,即可得到分类后的数组对象。例如,对于"hobby"为"吃饭"的分类,可以这样调用:

const list1 = classifyByHobby(data, '吃饭');
console.log(list1);

输出结果为:

[
  {
    id: 1,
    name: "张三"
  },
  {
    id: 2,
    name: "李四"
  }
]

同样地,对于"hobby"为"睡觉"的分类,可以这样调用:

const list2 = classifyByHobby(data, '睡觉');
console.log(list2);

输出结果为:

[
  {
    id: 1,
    name: "张三"
  },
  {
    id: 3,
    name: "王五"
  }
]

希望这个解决方案对您有帮助!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^