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

推薦する

CSS オーバーフローラップの新しいプロパティ値をどこでも使用

1.まず、overflow-wrap属性を理解する CSS のoverflow-wrapプロパティは...

MySQL バックアップ スクリプトの書き方

序文:データベースのバックアップの重要性は、特にデータの損失が深刻な結果を招く可能性がある実稼働環境...

Docker で Tomcat、MySQL、Redis をインストールするための詳細な手順

目次DockerでTomcatをインストールするtomcatイメージを使用してコンテナを作成する(イ...

Vueライフサイクルの詳細な説明

目次ライフサイクルを理解する理由ライフサイクルとはライフサイクルフック関数作成され、マウントされたフ...

Ubuntu 18.04 に MySQL をインストールする (グラフィカル チュートリアル)

ヒント: 以下の操作はすべて root 権限で実行されます。 # MySQL がインストールされてい...

JS 実用的なオブジェクト指向スネークゲームの例

目次考える1. 貪欲な蛇の効果画像2. スネークの分析2.1 ゲーム開始機能2.2 運動機能2.2....

Ubuntu サーバーで MySQL を設定し、リモート接続を実装する方法

サーバー: Ubuntu Server 16.04 LSSクライアント: Ubuntu 16.04 ...

HTMLポップアップdivはモバイルの中央揃えを実現するのに非常に便利です

コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...

MySQL カーディナリティ統計の簡単な分析

1. カーディナリティとは何ですか?カーディナリティとは、MySQL テーブルの列内の異なる値の数を...

Vue-router プログラムナビゲーションの 2 つの実装コード

ページをナビゲートする2つの方法宣言型ナビゲーション: リンクをクリックしてナビゲーションを実現する...

jsは配列の平坦化を実装します

目次配列をフラット化する方法1.flat() の使用2. 正規表現を使用する3.reduce()+c...

原因不明のMySqlサービス消失の解決策

原因不明のMySqlサービス消失の解決策先ほど、MySQL-Front が突然 MySql を開けな...

Ubuntu 20.04 Firefox でビデオを再生できない (Flash プラグインがない) 場合の解決策

1. Flashプラグインパッケージのダウンロードアドレス: https://get.adobe.c...

CSS3を使用してフォントカラーグラデーションを実装する

Animation.css を使うと公式サイトのフォントがだんだんと変わっていくのが分かりました。c...

オブジェクト内のフィールドを削除する js メソッド

この記事では主に、オブジェクト内のフィールドを削除するための js の実装を紹介し、次のように共有し...