Fluent Streams: 豊富なイテラブル操作のためのライブラリ
アートワーク: https://code-art.pictures/
次のようなライブラリを想像してください。
- Ramda と同様に、イテラブル操作に便利な関数を多数提供します
- 標準の配列反復メソッドなど、使い慣れた読み取り
- 配列、セット、反復プロトコルなどの JavaScript 組み込みを置き換えようとしません。
- Java Streams と同様に、「値なし」と「値として定義されていない」を明確に区別するオプションが含まれています
- バンドルサイズの点でコンパクトです
これらすべてのニーズを満たすものが見つからなかったので、私の小さなライブラリ、fluent-streams を作成しました。
話は安いです。コードを見せて
テキスト内の単語トップ 3
const words = ['Lorem', 'ipsum', /* ... */] stream(words) .groupBy(word => word.toLowerCase()) .map(([word, list]) => [word, list.length]) .sortBy(([, length]) => -length) .take(3) .toArray() // => ['ut', 3], ['in', 3], ['dolor', 2]
互いに素な整数
// Endless stream of 2..999 integers const randomInts = continually(() => 2 + Math.floor(Math.random() * 998) ) randomInts .zip(randomInts) .filter(([a, b]) => gcd(a, b) === 1) .distinctBy(pair => stream(pair).sortBy(i => i).join()) .take(10) // => [804, 835], [589, 642], [96, 145], ...
- 示されているように、ストリームは無限になる可能性がありますが、take(n) メソッドを使用して最初の n 項目に制限できます
- ストリームは、並列であっても複数回再利用できます。これは、ストリームがステートレスであり、入力への参照のみを保存するためです。状態は、ストリームがイテレータを生成するときにのみ作成されます。
カードのデッキを生成する
const deck = streamOf('♠', '♥', '♣', '♦') .flatMap(suit => streamOf<string | number>( 'A', ...range(2, 11), 'J', 'Q', 'K' ).map(rank => `${rank}${suit}`) ) // => 'A♠', '2♠', '3♠', ...
そしてホールデムポーカーをプレイしましょう!
const playersNum = 2 const [flop, turn, river, ...hands] = deck .takeRandom(3 + 1 + 1 + playersNum * 2) .zipWithIndex() .splitWhen((_, [, j]) => j === 3 // flop || j === 4 // turn || j >= 5 // river && j % 2 === 1 // ...players' hands ) .map(chunk => // Unzip index chunk.map(([card]) => card) ) // flop = ['3♦', '9♣', 'J♦'] // turn = ['4♣'] // river = ['7♦'] // hands = ['J♠', '4♥'], ['10♠', '8♥']
最初のプレーヤーはフロップでジャックのペアを持っていますが、2 番目のプレーヤーはストレートを取得しますが、それはリバー上でのみです。誰が勝つでしょうか?
これは安いに違いない
上記のすべては、ネイティブ データ構造のみで実現できます。ただし、Fluent Streams で書かれたコードは読みやすくなります。コードを読みやすくすることは完全に有効な目標ですが、認知負荷、バンドル サイズ、パフォーマンスの観点から、それを達成するためのコストは低くなければなりません。
Fluent Streams もまさにそれです!その理由は次のとおりです:
- 学習曲線なし: API は標準の Array メソッドに似ており、親しみやすいものです。追加も削除も簡単です。
- 再発明なし: ライブラリは新しいデータ構造やプロトコルを作成しません。JavaScript のすでに堅牢な機能に基づいて構築されます。
- バンドルへの影響は最小限: わずか 8.5 KB に縮小されているため、軽量です。プロジェクトにすでに React とそのサテライト ライブラリが含まれており、その重さは数百キロバイトである場合、この追加はほとんど目立ちません。
- 遅延処理: ライブラリは項目を遅延処理します。これにより、不必要な中間データのコピーが回避され、メモリ使用量が削減され、長いパイプラインの効率が向上します。
注意事項
ライブラリは ES5 に変換されず出荷されます。この決定は、バンドル サイズを小さく維持したいという要望によって決定されました。これは、非常に簡潔なコード (特にジェネレーター) での反復を可能にする ES6 機能を活用することで実現されます。ただし、広くサポートされている言語機能のみが利用されます。
まだ ES5 にトランスパイルしている場合は、ライブラリを自分でトランスパイルしてポリフィルを追加することで使用できます。ただし、これによりバンドルのサイズが増加するため、推奨されないことに注意してください。むしろ、これはビルド構成を見直し、最新の JavaScript 機能を採用する絶好の機会かもしれません。
コーディングを楽しんでください!
以上がFluent Streams: 豊富なイテラブル操作のためのライブラリの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...
