问题:
给定一个对象数组和一个过滤器对象,我们的目标是根据过滤器对象中指定的多个条件过滤数组元素。然而,当前的实现遇到一个问题,即结果中包含仅满足条件子集的多个元素。
解决方案:
问题是由错误使用引起的过滤函数中的 for (var i = 0; i
为了解决这个问题,我们可以直接迭代filter对象的属性并检查每个用户对象上的属性是否存在。以下代码演示了正确的实现:
<code class="javascript">function filterUsers(users, filter) { var result = []; for (var prop in filter) { if (filter.hasOwnProperty(prop)) { users.forEach(function(user) { if (user[prop] === filter[prop]) { result.push(user); } }); } } return result; }</code>
改进的过滤器函数:
改进的filterUsers函数现在迭代用户并检查过滤器对象的每个属性查看是否与用户对应的属性值匹配。结果中仅包含所有指定属性的值都匹配的用户。
示例:
<code class="javascript">var filter = { address: 'England', name: 'Mark', }; var users = [{ name: 'John', email: 'john@example.com', age: 25, address: 'USA', }, { name: 'Tom', email: 'tom@example.com', age: 35, address: 'England', }, { name: 'Mark', email: 'mark@example.com', age: 28, address: 'England', }, ]; var filteredUsers = filterUsers(users, filter); console.log(filteredUsers); // Output: [{ // name: 'Mark', // email: 'mark@example.com', // age: 28, // address: 'England', // }]</code>
此实现确保只有名称为 Mark 的用户根据过滤条件的指定,居住在英格兰的人包含在结果中。
以上是如何在 JavaScript 中根据多个条件过滤对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!