給定一個對象數組和一個過濾器對象,目標是過濾和根據篩選器中指定的多個條件簡化陣列。但是,當過濾器包含多個屬性時,會出現一個特定問題。
考慮以下程式碼段:
<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中文網其他相關文章!