有这样一个数组对象,希望能够根据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
方法来筛选出包含传入参数的数组对象。具体步骤如下:
filter
方法遍历data
数组,对每个对象进行筛选。hobby
字段中使用includes
方法判断传入参数是否包含在其中。id
和name
字段存入新数组中。下面是具体的代码实现:
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: "王五"
}
]
希望这个解决方案对您有帮助!如果还有其他问题,请随时提问。
【相关推荐】