如何根据对象数组中types属性的元素值筛选目标对象?
解决方法:根据数组属性中的元素筛选对象
嘿,你遇到的问题很典型——因为你搞错了types属性的类型判断方式!
你看,address_components里每个对象的types是数组类型,而不是字符串。你之前用obj.types === "country"是在拿一个数组和字符串做全等比较,这肯定不会匹配成功,所以filter返回了空数组(不是undefined哦,你可能看错控制台输出啦😉)。
而你用short_name === "US"能成功,是因为short_name本身就是字符串类型,全等比较自然能匹配。
正确的筛选代码
你需要用数组的includes()方法来检查types数组里是否包含"country"这个元素:
const address_components = [ { long_name: "11237", short_name: "11237", types: ["postal_code"] }, { long_name: "Kings County", short_name: "Kings County", types: ["political, administrative_area_level_2"] }, { long_name: "New York", short_name: "NY", types: ["political", "administrative_area_level_1"] }, { long_name: "United States", short_name: "US", types: ["political", "country"] } ]; var result = address_components.filter(obj => { return obj.types.includes("country"); }); console.log(result); // 会输出包含"country"的那个对象数组
补充:兼容旧环境的写法
如果你的代码需要兼容不支持includes()的旧浏览器,可以用indexOf()代替:
var result = address_components.filter(obj => { return obj.types.indexOf("country") !== -1; });
这样就能正确筛选出types属性里包含"country"的对象啦!
内容的提问来源于stack exchange,提问作者vanegeek
相关产品推荐
相关产品推荐

