You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤含多值组合的对象?过滤hobbies时filter方法失效求助

解决方法

你的代码存在两个问题:

  • 语法错误:过滤hobbies的代码里,Music缺少前引号,应该写成"Music"
  • 逻辑错误:hobbies是数组类型,直接用==和字符串比较永远不成立——数组属于引用类型,和字符串的类型、存储方式完全不同,无法直接通过相等运算符匹配。

正确的过滤方式是利用数组的includes()方法,检查当前项的hobbies数组中是否包含目标爱好:

var namePerson = [{ 
    name: "Andi", 
    age: "25", 
    hobbies: ["Soccer", "Badminton"],
},
{ 
    name: "Robert", 
    age: "25", 
    hobbies: ["Read", "Swim", "Soccer"],
},
{ 
    name: "Julia", 
    age: "28", 
    hobbies: ["Music", "Swim"],
}];

// 过滤年龄为25的用户
var arrayPersonFilter = namePerson.filter(function (item) { 
    return item.age == 25;
});

// 修正后过滤爱好包含Music的用户
var arrayPersonFilter2 = namePerson.filter(function (item) { 
    return item.hobbies.includes("Music");
});

console.log("==========Age============"");
console.log(arrayPersonFilter);
console.log("==========Hobbies============"");
console.log(arrayPersonFilter2);

如果运行环境不支持includes()方法(比如旧版浏览器),可以用indexOf()替代,判断返回值不等于-1即可:

var arrayPersonFilter2 = namePerson.filter(function (item) { 
    return item.hobbies.indexOf("Music") !== -1;
});

内容的提问来源于stack exchange,提问作者Van jie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:27:28