JavaScript:為物件實作filter()
JavaScript為Array類型提供了filter()原型,但Object沒有此功能類型。為了解決這個限制,讓我們探索如何專門為物件建立一個filter()實作。
實作:
Object.prototype.filter = function(predicate) { var result = {}; for (key in this) { if (this.hasOwnProperty(key) && !predicate(this[key])) { result[key] = this[key]; } } return result; };
雖然這個實作是獨立工作的,但添加將其發送到使用jQuery 1.5 和jQuery UI 1.8.9 的網站可能會觸發JavaScript 錯誤。
替代解決方案:
不要修改物件原型,而是考慮這些獨立的或實用函數:
1。使用reduce和Object.keys:
Object.filter = (obj, predicate) => Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {});
2.使用映射和展開語法:
Object.filter = (obj, predicate) => Object.entries(obj) .filter(([key, value]) => predicate(value)) .reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
3.使用Object. entries 和Object.fromEntries:
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) );
用法範例:
var scores = { John: 2, Sarah: 3, Janet: 1 }; var filtered = Object.filter(scores, score => score > 1); console.log(filtered);
這些替代方案提供了一種更乾淨、更易於維護的方式過濾物件屬性,同時保留原始物件。
以上是如何為 JavaScript 物件實作'filter()”方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!