開発効率を向上させる 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に絵文字表現を保存する詳細な手順

推薦する

CentOS7 は rpm パッケージを使用して mysql 5.7.18 をインストールします

例示するこの記事は、2017 年 5 月 20 日に MySQL-5.7.18 を使用して作成されま...

css n番目から始まるすべての要素を取得する

具体的なコードは次のとおりです。 <div id="ボックス"> &...

JavaScript で実装された 6 つの Web ページ画像カルーセル効果の詳細な説明

目次1. マウスがカルーセル モジュール上を通過すると、左右のボタンが表示され、モジュールを離れると...

YUMを使用してdockerをインストールする方法

次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...

写真とテキストによる MySQL 8.0.11 インストール チュートリアル

インターネット上には多くのチュートリアルがありますが、基本的には同じです。ただし、細かい原因でソフト...

Vue ミックスインの使い方の詳しい説明

目次Vue ミックスインの使用ミックスインでのデータアクセスミックスイン/index.jsホーム.v...

フロントエンドのパフォーマンス最適化を学習するための準備として、HTML ページのレンダリング プロセスを理解する (続き)

昨夜、ブラウザのレンダリングプロセスに関するエッセイを書きましたが、小さなコードで説明しただけでした...

docker-compose.yml ファイル内の一般的なテンプレート コマンドの詳細な説明

注意: docker-compose.yml ファイルを書き込むときは、すべてのコロン (:) とダ...

nginx と openssl で https を実装する方法

サーバーデータがSSL証明書を使用して暗号化および認証されていない場合、ユーザーのデータはプレーンテ...

SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)

序文:私はずっと、SQL 文がどのように、どのような順序で実行されるのかを知りたいと思っていました。...

mysql データベースの作成、ユーザーの追加、ユーザー認証の実用的な方法

1. MySQLデータベースを作成する1. データベース構文を作成する --「testdb」という名...

HTML と埋め込み Flash の両方におけるスクロールバーの分析と処理

開発を行う際に、次のような状況に遭遇することがよくあります。 a.swf が Web ページに追加さ...

MySQL はどのようにしてマルチバージョンの同時実行性を実現するのでしょうか?

目次MySQL マルチバージョン同時実行1. マルチバージョン同時実行制御1. 一貫した読み取り2....

VMware 15 仮想マシンに Ubuntu 18.04 をインストールするグラフィック チュートリアル

ここ数年、私は自動化とコンピューターを行ったり来たりしてきました。最近は、機械学習に関連するプロジェ...

1 分で Nginx のバージョンをスムーズにアップグレードおよびロールバックする方法

今日は、企業の実際の本番環境でよく遭遇する、Nginx を新しいバージョンにアップグレードし、古いバ...