コード行数を減らして開発をスピードアップするテクニック! 開発中は、並べ替え、検索、一意の値の検索、パラメータの受け渡し、値の交換などの関数を記述する必要があることがよくあります。ここでは、これらの関数をマスターのように記述できるように、私が収集したいくつかの技術リソースをリストしました。 以下の方法は間違いなく役立ちます:
これらの JavaScript ハックのほとんどは ECMAScript 6 (ES2015) 以降のテクニックを使用していますが、最新バージョンは ECMAScript 11 (ES2020) です。 注: 以下のヒントはすべて Google Chrome コンソールでテストされています。 1. 配列を宣言して初期化する特定のサイズの配列を、""、null、0 などのデフォルト値で初期化できます。 1D 配列にはこれらを使用したことがあるかもしれませんが、2D 配列/行列を初期化するにはどうすればよいでしょうか? const配列 = Array(5).fill(''); // 出力 (5)["", "", "", "", ""] 定数行列 = Array(5).fill(0).map(()=>Array(5).fill(0)); // 出力 (5) [配列(5), 配列(5), 配列(5), 配列(5), 配列(5)] 0: (5) [0, 0, 0, 0, 0] 1: (5) [0, 0, 0, 0, 0] 2: (5) [0, 0, 0, 0, 0] 3: (5) [0, 0, 0, 0, 0] 4: (5) [0, 0, 0, 0, 0] 長さ: 5 2. 合計、最小値、最大値を計算する基本的な数学演算をすばやく実行するには、reduce メソッドを使用します。 定数配列 = [5,4,7,8,9,2]; 和 配列を縮小します((a,b) => a+b); // 出力: 35 最大 配列を縮小します((a,b) => a>b?a:b); // 出力: 9 最小 配列を縮小します((a,b) => a<b?a:b); // 出力: 2 3. 文字列、数値、オブジェクトの配列を並べ替える文字列をソートするための組み込みの sort() メソッドと river() メソッドがありますが、数値やオブジェクトの配列をソートする場合はどうでしょうか? 文字列のソート const stringArr = ["ジョー", "カピル", "スティーブ", "マスク"] 文字列をソートする // 出力 (4)[「ジョー」、「カピル」、「マスク」、「スティーブ」] 文字列Arrを逆順にする // 出力 (4)[「スティーブ」、「マスク」、「カピル」、「ジョー」] 数値ソート 定数配列 = [40, 100, 1, 5, 25, 10]; 配列をソートします((a,b) => ab); // 出力 (6)[1、5、10、25、40、100] 配列をソートします((a,b) => ba); // 出力 (6)[100、40、25、10、5、1] オブジェクトのソート 定数オブジェクトArr = [ { 名: 'Lazslo'、 姓: 'Jamf' }, { first_name: 'Pig', last_name: 'Bodine' }, { first_name: '海賊', last_name: '見習い' } ]; objectArr.sort((a, b) => a.last_name.localeCompare(b.last_name)); // 出力 (3)[{…}, {…}, {…}] 0: {first_name: "Pig", last_name: "Bodine"} 1: {first_name: "Lazslo", last_name: "Jamf"} 2: {first_name: "海賊", last_name: "プレンティス"} 長さ: 3 4. 配列から無駄な値を除外する必要がありますか?0、undefined、null、false、""、'' などの値は、次のトリックで簡単にフィルタリングできます。 定数配列 = [3, 0, 6, 7, '', false]; 配列.フィルター(ブール値); // 出力 (3)[3, 6, 7] 5. さまざまな条件に論理演算子を使用するif...else や switch などのネストを減らしたい場合は、論理演算子 AND/OR を使用できます。 関数doSomething(arg1){ 引数1 = 引数1 || 10; // arg1 がまだ設定されていない場合は、デフォルトで 10 に設定します 引数1を返します。 } foo = 10 とします。 foo === 10 && doSomething(); // は if (foo == 10) then doSomething(); と同じです。 // 出力: 10 foo === 5 || doSomething(); // は if (foo != 5) then doSomething(); と同じです。 // 出力: 10 6. 重複する値を削除する重複する値を検索/削除するために、for ループで最初に見つかったインデックスを返す indexOf() や、配列からブール値の true/false を返す新しい include() を使用したことがあるかもしれません。ここでは、より速い方法が 2 つあります。 定数配列 = [5,4,7,8,9,2,7,5]; 配列.filter((item,idx,arr) => arr.indexOf(item) === idx); // または const nonUnique = [...新しいSet(配列)]; // 出力: [5, 4, 7, 8, 9, 2] 7. カウンターオブジェクトまたはマップを作成する多くの場合、変数をキーとして、その頻度/発生回数を値として使用して変数を追跡するカウンター オブジェクトまたはマップを作成することによって問題を解決する必要があります。 文字列を 'kapilalipak' とします。 テーブル定数 = {}; for(let char of string) { テーブル[文字]=テーブル[文字]+1 || 1; } // 出力 {k: 2、a: 3、p: 2、i: 2、l: 2} そして 新しい Map() を作成します。 (i = 0; i < string.length; i++) の場合 { countMap.has(文字列[i])の場合{ countMap.set(文字列[i], countMap.get(文字列[i]) + 1); } それ以外 { countMap.set(文字列[i], 1); } } // 出力 マップ(5) {"k" => 2, "a" => 3, "p" => 2, "i" => 2, "l" => 2} 8. 三項演算子はクール三項演算子を使用すると、ネストされた if...elseif...elseif 条件を回避できます。 関数 Fever(temp) { 温度が 97 度を超えている場合は、「医師の診察を受けてください」 : 温度 < 97 ? 「外へ出て遊びましょう!!」 : temp === 97 ? 'ちょっと休憩しましょう!'; } // 出力 フィーバー(97):「ちょっと休んで!」 熱(100):「医者に診てもらいましょう!」 9. For ループは従来の once ループよりも高速です。for と for...in はデフォルトでインデックスを取得しますが、代わりに arr[index] を使用することもできます。 for...in は数値以外の値も受け入れるので、使用しないでください。 forEach、for...of は要素を直接取得できます。 forEach でもインデックスを取得できますが、for...of では取得できません。 10. 2つのオブジェクトを結合する日常業務では、複数のオブジェクトを結合する必要があることがよくあります。 定数ユーザー = { 名前:「カピル・ラグワンシ」 性別: '男性' }; const 大学 = { 小学校: 「マニ小学校」 中等学校:「ラス中等学校」 }; 定数スキル = { プログラミング: 「エクストリーム」、 水泳:「平均」、 睡眠: 「プロ」 }; const summary = {...ユーザー、...大学、...スキル}; // 出力 性別: 「男性」 名前:「カピル・ラグワンシ」 小学校:「マニ小学校」 プログラミング:「エクストリーム」 中学校:「ラス中学校」 睡眠:「プロ」 水泳:「平均的」 11. 矢印関数矢印関数式は、従来の関数式のコンパクトな代替手段ですが、制限があり、すべての場合に使用できるわけではありません。これらはレキシカル スコープ (親スコープ) を持つため、独自の this および引数を持たず、定義されている環境を参照します。 定数人 = { 名前:「カピル」 名前を言う() { this.name を返します。 } } person.sayName(); // 出力 「カピル」 矢印関数は次のように書き直されます。 定数人 = { 名前:「カピル」 名前を言う() { this.name を返します。 } } person.sayName(); // 出力 「カピル」 12. オプションの連鎖? の前の値が undefined または null の場合、オプション チェーン ? は評価を停止し、undefined を返します。 定数ユーザー = { 従業員: 名前:「カピル」 } }; ユーザー.従業員?.名前; // 出力: "Kapil" ユーザ.従業員?.名前; // 出力: 未定義 ユーザ名 // 出力: VM21616:1 Uncaught TypeError: 未定義のプロパティ 'name' を読み取ることができません 13. 配列をシャッフルする組み込みの Math.random() メソッドを使用します。 定数リスト = [1, 2, 3, 4, 5, 6, 7, 8, 9]; リスト.ソート(() => { Math.random() - 0.5 を返します。 }); // 出力 (9)[2、5、1、6、9、8、4、3、7] // もう一度呼び出す (9)[4、1、7、5、3、8、2、9、6] 14. ヌル合体演算子ヌル合体演算子 (??) は、左側のオペランドが null または未定義の場合に右側のオペランドを返し、それ以外の場合は左側のオペランドを返す論理演算子です。 const foo = null ?? '私の学校'; // 出力: "私の学校" 定数 baz = 0 ?? 42; // 出力: 0 15. レスト演算子とスプレッド演算子あの不思議な3つの点は、休息または拡散を意味します。 関数 myFun(a, b, ...manyMoreArgs) { 引数の長さを返します。 } myFun("1", "2", "3", "4", "5", "6"); // 出力: 6 そして const parts = ['肩', '膝']; const lyrics = ['head', ...parts, 'and', 'toes']; 歌詞; // 出力: (5)[「頭」、「肩」、「膝」、「そして」、「つま先」] 16. デフォルトパラメータconst 検索 = (arr、low=0、high=arr.length-1) => { 高く返す; } 検索([1,2,3,4,5]); // 出力: 4 17. 10進数を2進数または16進数に変換するこの種の問題を解決するには、.toPrecision() や .toFixed() などの組み込みメソッドを使用できます。 num.toString(2); // 出力: "1010" 数値を文字列に変換します(16); // 出力: "a" 数値を文字列に変換します(8); // 出力: "12" 18. 構造化分解を使用して2つの値を単純に交換するa = 5 とします。 b = 8 とします。 [a,b] = [b,a] [a,b] // 出力 (2)[8, 5] 19. 一行回文チェック関数 checkPalindrome(str) { str == str.split('').reverse().join(''); を返します。 } checkPalindrome('naman'); // 出力: true 20. オブジェクトのプロパティを配列のプロパティに変換するObject.entries()、Object.key()、Object.values() を使用します。 定数obj = { a: 1, b: 2, c: 3 }; オブジェクト.entries(obj); // 出力 (3)[配列(2), 配列(2), 配列(2)] 0: (2) ["a", 1] 1: (2) ["b", 2] 2: (2) ["c", 3] 長さ: 3 オブジェクト.keys(obj); (3)["a", "b", "c"] オブジェクトの値(obj); (3)[1, 2, 3] 要約する私がまとめたのは以上です。123WORDPRESS.COM の他の記事にも注目していただければ幸いです。 以下もご興味があるかもしれません:
|
1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...
序文:データベースのバックアップの重要性は、特にデータの損失が深刻な結果を招く可能性がある実稼働環境...
目次DockerでTomcatをインストールするtomcatイメージを使用してコンテナを作成する(イ...
目次ライフサイクルを理解する理由ライフサイクルとはライフサイクルフック関数作成され、マウントされたフ...
ヒント: 以下の操作はすべて root 権限で実行されます。 # MySQL がインストールされてい...
目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....
サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...
ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...
目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...
原因不明のMySqlサービス消失の解決策先ほど、MySQL-Front が突然 MySql を開けな...
1. Flashプラグインパッケージのダウンロードアドレス: https://get.adobe.c...
Animation.css を使うと公式サイトのフォントがだんだんと変わっていくのが分かりました。c...
この記事では主に、オブジェクト内のフィールドを削除するための js の実装を紹介し、次のように共有し...