首頁 >web前端 >js教程 >如何有效過濾 JavaScript 物件中的鍵值對?

如何有效過濾 JavaScript 物件中的鍵值對?

Barbara Streisand
Barbara Streisand原創
2024-11-24 07:04:11810瀏覽

How can I effectively filter the key-value pairs in a JavaScript object?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn