開発効率を向上させる 20 の JavaScript ヒント

開発効率を向上させる 20 の JavaScript ヒント

コード行数を減らして開発をスピードアップするテクニック!

開発中は、並べ替え、検索、一意の値の検索、パラメータの受け渡し、値の交換などの関数を記述する必要があることがよくあります。ここでは、これらの関数をマスターのように記述できるように、私が収集したいくつかの技術リソースをリストしました。

以下の方法は間違いなく役立ちます:

  • LOC(コード行数)を減らす
  • コーディングコンテスト
  • ハッカソン
  • または時間制限のあるタスク

これらの 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 の他の記事にも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • AngularJS 実践開発スキル(推奨)
  • 古典的なJavaScript開発スキルを共有する
  • javascript:; と javascript:void(0) の使い方の紹介
  • Javascript の「&」と「|」の詳しい説明

<<:  MySQL binlog を開く手順

>>:  MySQLに絵文字表現を保存する詳細な手順

推薦する

Mysqlはブール型の演算を設定します

Mysqlはブール型を設定します1. Tinyintタイプテストテーブルを作成し、blフィールドをブ...

Linux の一般的な基本コマンドと使用方法

この記事では、一般的な基本的な Linux コマンドとその使用方法を例を使って説明します。ご参考まで...

Vueのウォッチリスナーの使い方を説明する記事

目次リスナーウォッチ形式リスナーを設定します。要約するリスナーウォッチ関数名は、リッスンする要素の名...

Vue3はサイドナビゲーションテキストスケルトン効果コンポーネントをカプセル化します

Vue3プロジェクトのカプセル化サイドナビゲーションテキストスケルトン効果コンポーネント-グローバル...

Web プロジェクト開発 VUE の混合と継承の原則

目次ミキシンMixin ノート (重複名)ローカルミックスイングローバル ミックスイン定義とグローバ...

HTML と CSS に関する基本的なメモ (フロントエンドでは必読)

HTMLに触れた当初はレイアウトにいつもテーブルを使っていましたが、とても面倒で見た目も悪かったの...

Windows Server 2016 で Flash を有効にする方法

最近、VMware Horizo​​n を導入してテストしましたが、そのコンソールにはデフォルトで ...

CSS (カスケーディング スタイル シート) の一般的な用語の概要

CSS を使用する場合は、DOCTYPE (ドキュメント タイプ定義) を記述することを忘れないでく...

Dockerでコンテナを作成するときにコンテナIPを指定する実装例

Docker はコンテナを作成するときに、デフォルトでブリッジ ネットワークを使用し、IP アドレス...

Vue での bimface の使用に関する詳細

目次1. Vue スキャフォールディングをインストールする2. プロジェクトを作成する3.1 プロジ...

MySQL データベースのインポートとエクスポートのデータ エラーの解決例の説明

データのエクスポートエラーを報告する 「secure_file_priv」のような変数を表示します。...

Mysql5.7 で中国語の文字化けの問題を解決する

MySQL 5.7 を使用すると、Web ターミナル経由でデータベースに中国語の文字を書き込むと文字...

Linux でシェル スクリプトを使用して jar パッケージ プロジェクトを展開するための完全な手順

1. JDKをインストールする コンピュータの動作桁を確認します。 uname -ar 2017 x...

水平スクロールバーを実装する2つの方法の例

序文:プロジェクトの開発中に、1 行にナビゲーション バーが多すぎる場合に水平スクロール バーを実装...

Vueのドラッグスクリーンショット機能を実装する簡単な方法

マウスをドラッグしてページのスクリーンショットを撮ります(指定した領域にスクリーンショットをドラッグ...