JavaScript:物件的filter()
ECMAScript 5 中存在陣列類型的filter() 原型,但不存在物件類型。要在JavaScript 中為物件實作filter() 函數,您可以使用下列策略:
1.使用reduce() 和Object.keys()
此方法利用reduce() 迴圈遍歷物件的鍵,並利用Object.keys() 檢索這些鍵。然後,它根據謂詞函數過濾鍵,並傳回一個具有過濾後的鍵值對的新物件:
Object.filter = (obj, predicate) => { Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {}); };
2。使用map()和Spread語法
與(1)類似的方法,但你可以使用map()和Spread語法(...)來建立一個新的,而不是reduce()對象:
Object.filter = (obj, predicate) => { Object.keys(obj) .filter(key => predicate(obj[key])) .map(key => ({ [key]: obj[key] })) .reduce((a, b) => ({ ...a, ...b }), {}); };
3。使用Object.entries() 和Object.fromEntries()
該方法使用Object.entries() 將物件轉換為鍵值對數組,然後用Object.fromEntries() 重構過濾後的物件:
Object.filter = (obj, predicate) => { return Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) ); };
4.注意:避免擴展Object.prototype
雖然這些解決方案為物件提供了功能性的 filter() 實現,但直接擴展 Object.prototype 被認為是不好的做法。相反,將篩選函數作為獨立的實用函數提供,類似於現有的 JavaScript 全域實用函數,如 Object.assign() 和 Object.keys()。
以上是如何有效過濾 JavaScript 物件中的鍵值對?的詳細內容。更多資訊請關注PHP中文網其他相關文章!