JavaScript: オブジェクトの filter()
filter() プロトタイプは ECMAScript 5 の配列型に対して存在しますが、オブジェクト型に対しては存在しません。 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) と同様のアプローチですが、reduce() の代わりに、map() と Spread 構文 (...) を使用して新しいオブジェクト:
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 を直接拡張することは悪い習慣であると考えられています。代わりに、Object.assign() や Object.keys() などの既存の JavaScript グローバル ユーティリティ関数と同様に、フィルター関数をスタンドアロン ユーティリティ関数として提供します。
以上がJavaScript オブジェクト内のキーと値のペアを効果的にフィルターするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。