JS中如何使用对象作为过滤条件筛选对象数组
你可以结合Array.prototype.filter()、Object.entries()和Array.prototype.every()三个方法实现需求,具体实现代码如下:
// 先补全原数组的语法错误:第一个元素country属性后加英文逗号 const hotels = [ { name: "Marina Inn", country: "США", address: "Фалираки", stars: 4, }, { name: "Mondrian Suites", country: "Греция", address: "Родос", stars: 5, }, { name: "Mondrian Suites", country: "США", address: "Родос", stars: 5, } ] const objFilter = { country: "США", stars: 5, } // 筛选逻辑 const filteredHotels = hotels.filter(hotel => { return Object.entries(objFilter).every(([filterKey, filterValue]) => { return hotel[filterKey] === filterValue }) }) console.log(filteredHotels)
逻辑说明
filter方法遍历原数组,返回所有符合校验规则的元素组成的新数组Object.entries(objFilter)会将过滤对象转为[键, 值]格式的二维数组,方便遍历所有过滤条件every方法校验当前数组元素是否满足所有过滤条件:只有当前酒店对象的所有过滤字段的值和过滤规则完全相等时,才会被保留到结果中
运行上述代码得到的结果和你给出的预期输出完全一致。
内容的提问来源于stack exchange,提问作者Oleksii
相关产品推荐
相关产品推荐

