如何过滤含多值组合的对象?过滤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
相关产品推荐
相关产品推荐

