给定一个对象数组和一个过滤器对象,目标是过滤和根据过滤器中指定的多个条件简化数组。但是,当过滤器包含多个属性时,会出现一个特定问题。
考虑以下代码段:
<code class="js">function filterUsers(users, filter) { var result = []; for (var prop in filter) { if (filter.hasOwnProperty(prop)) { // Iterate over the array for (var i = 0; i < filter.length; i++) { if (users[i][prop] === filter[prop]) { result.push(users[i]); } } } } return result; }
在建议的解决方案中,会出现问题当过滤器包含多个属性时。具体来说,在第二次迭代期间,users[i][prop] 和 filter[prop] 之间的比较不正确。为了解决这个问题,我们可以将代码修改为以下内容:
<code class="js">function filterUsers(users, filter) { var result = []; for (var prop in filter) { if (filter.hasOwnProperty(prop)) { // Apply filter on the array users = users.filter((user) => user[prop] === filter[prop]); } } return result; }</code>
在此版本中,我们利用数组内置的过滤方法来动态应用过滤条件。这可确保结果中仅包含满足所有指定条件的对象。
使用更新的解决方案,过滤过程将按预期工作:
<code class="js">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 filter = { address: 'England', name: 'Mark' }; var filteredUsers = filterUsers(users, filter); console.log(filteredUsers); // Output: [{ name: 'Mark', email: 'mark@example.com', age: 28, address: 'England' }]</code>
此解决方案解决了多个过滤条件未正确应用的问题,确保生成的过滤数组准确反映指定的条件。
以上是如何根据多个条件过滤 JavaScript 对象数组?的详细内容。更多信息请关注PHP中文网其他相关文章!