JavaScript:為物件實作自訂filter() 方法
ECMAScript 5 規格引入了陣列的filter() 原型,但沒有引入對於物體。通常不鼓勵擴充 JavaScript 的內建物件。但是,如果需要,可以使用以下方法為物件建立自訂 filter()功能:
1.使用reduce()和Object.keys()
Object.filter = (obj, predicate) => Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => (res[key] = obj[key], res), {}); // Example: const scores = { John: 2, Sarah: 3, Janet: 1 }; const filtered = Object.filter(scores, score => score > 1); console.log(filtered);
2.將reduce()和Object.k eys()與Object.assign()結合使用
Object.filter = (obj, predicate) => Object.keys(obj) .filter(key => predicate(obj[key])) .reduce((res, key) => Object.assign(res, { [key]: obj[key] }), {}); // Example: same as above
3.使用map()和展開語法
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj) .filter(([key, value]) => predicate(value)) .map(([key, value]) => [key, value]) ); // Example: same as above
4.使用Object.entries() 和 Object.fromEntries()
Object.filter = (obj, predicate) => Object.fromEntries( Object.entries(obj).filter(([key, value]) => predicate(value)) ); // Example: same as above
請記住,擴充內建原型可能會產生意想不到的後果。通常最好將自訂函數作為獨立實用程式提供,或專門針對特定功能擴展全域物件。
以上是如何在 JavaScript 中為物件實作自訂「filter()」方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!