はじめに
今回は、コーディングテストでよく使いそうな処理を一覧でまとめました。
転職活動で実際にコーディングテストを受けた経験から、試験でアルゴリズムを考える際に、よく使いたくなる処理をまとめたので、良ければ参考にしてみてください。
自分の備忘用でもありますが、自分はこの一覧を試験前に目を通したりしてましたね。。。
算術処理
加算 +
数値 + 数値
console.log(1 + 2);
//==> 3
減算 –
数値 – 数値
console.log(3 - 1);
//==> 2
掛算 *
数値 * 数値
console.log(3 * 2);
//==> 6
割算 /
数値 / 数値
console.log(6 / 2);
//==> 3
余りを求める %
数値 % 数値
console.log(7 % 4);
//==> 3
べき乗 **
数値 ** 数値
console.log(2 ** 3);//2の3乗(2x2x2)
//==> 8
少数点
切り上げ Math.ceil()
Math.ceil( 小数値 )
const number = Math.ceil(2.4);
console.log(number);
//==> 3
切り捨て Math.floor()
Math.floor( 小数値 )
const number = Math.floor(2.4);
console.log(number);
//==> 2
四捨五入 Math.round()
Math.floor( 小数値 )
const number_1 = Math.round(1.5);
console.log(number_1);
//==> 2
const number_2 = Math.round(1.4);
console.log(number_2);
//==> 1
最大値・最小値
最大値 Math.max()
Math.max( … {数値の配列} )
const array = [1,3,5,7,9,11];
const max = Math.max(...array);//ピリオド3つは配列をバラバラにするために必要
console.log(max);
//==> 11
最小値 Math.min()
Math.max( … {数値の配列} )
const array = [1,3,5,7,9,11];
const min = Math.min(...array);//ピリオド3つは配列をバラバラにするために必要
console.log(min);
//==> 1
繰り返し
※パフォーマンスとしてはfor文の方が早いらしく、大量の要素数を扱う場合はfor文の方が良さそう。
条件を指定して繰り返す for
for ( 初期値; 条件式; 増減値 ) { // 繰り返す処理を書く }
- 初期値:繰り返す回数の初期値
- 条件式:繰り返しを継続する条件
- 増減値:「初期値」を増減する式
const array = ["a","b","c","d"];
for(let i = 0; i < array.length; i++){
console.log(array[i]);
}
//==> a
//==> b
//==> c
//==> d
//スキップする場合 continue文
for(let i = 0; i < array.length; i++){
if(i % 2 === 0){ continue; }//2で割り切れるindexの時はスキップ
console.log(array[i]);
}
//==> b
//==> d
//中断する場合 break文
for(let i = 0; i < array.length; i++){
if(i === 2){ break; }//indexが2のとき中断
console.log(array[i]);
}
//==> a
//==> b
配列の数だけ繰り返す forEach
{配列}.forEach( ( 要素 , index番号 ) => { //繰り返す処理 } );
- 要素:配列の各要素
- index番号:取り出している要素のインデックス番号
const array = ["a","b","c","d"];
array.forEach((element , index)=>{
console.log(`index番号:${index}` ,`要素:${element}`);
});
//==> index番号:0 要素:a
//==> index番号:1 要素:b
//==> index番号:2 要素:c
//==> index番号:3 要素:d
条件分岐
特定の条件で分岐 if~else if ~ else
if( 条件1 ) {
//条件が真の時の処理
} elese if( 条件2 ) {
//条件2が真の時の処理
} else {
//条件1~2以外の時の処理
}
const number = 80;
if(number === 100){
console.log("満点",`得点${number}`);
}else if(number >= 70){
console.log("合格",`得点${number}`);
}else{
console.log("不合格",`得点${number}`);
};
//==> 合格 得点80
複数の条件で分岐 swich
switch (key)) {
case 値1: //値1の時の処理
break;
case 値2: //値2の時の処理
break;
case 値3: //値3の時の処理
break;
default: //上記パターン以外の値の時の処理
break;
}
const number = "D";
switch (number) {
case "A":
console.log("Aです")
break;
case "B":
console.log("Bです")
break;
case "C":
console.log("Cです")
break;
case "D":
console.log("Dです")
break;
default:
console.log("該当なし")
break;
}
//==> Dです
配列
要素数を求める
{配列}.length
const array = ["a","b","c","d"];
console.log(array.length);
//==> 4
配列の各要素の初期値を指定して配列作成
Array( 配列のサイズ ).fill( 初期値 )
//数値配列
const array_1 = Array(5).fill(0);
console.log(array_1);
//==> [0,0,0,0,0]
//文字列配列
const array_2 = Array(5).fill("a");
console.log(array_2);
//==> ["a","a","a","a","a"]
配列を参照ではなくクローンして作成
[… {配列} ]
const array = ["a","b","c"];
const cloneArray = [...array];
array.push("d");
cloneArray.push("DDD");
console.log(array);
//==> ["a","b","c","d"]
console.log(cloneArray);
//==> ["a","b","c","DDD"]
配列の先頭に要素を追加 unshift
{array}.unshift( 追加する値1 , 追加する値2 , … )
const array = ["b","a"];
array.unshift("c");
console.log(array);
//==> ["c","b","a"]
array.unshift("e" , "d"); //第1引数が一番先頭へ追加される
console.log(array);
//==> ["e","d","c","b","a"]
配列の先頭の要素を削除加 shift
{array}.shift()
const array = ["c","b","a"];
array.shift();
console.log(array);
//==> ["b","a"]
配列の末尾に要素を追加 push
{array}.push( 追加する値1 , 追加する値2 , … )
const array = ["a","b"];
array.push("c");
console.log(array);
//==> ["a","b","c"]
array.push("d","e");
console.log(array);
//==> ["a","b","c","d","e"]
配列の末尾の要素を削除 pop
{array}.pop()
const array = ["a","b","c","d"];
array.pop();
console.log(array);
//==> ["a","b","c"]
配列の指定したindexに対して要素の追加 splice
{array}.splice(
操作開始位置index , //第1引数:必須
開始位置から削除する要素数, //第2引数:オプション
削除操作後に追加する値 //第3引数:オプション
)
const array_1 = ["a","b","c"];
array_1.splice(1, 0, "A"); // 2番目に挿入(第2引数が0 => 削除しない)
console.log(array_1);
//==> ["a", "A", "b", "c"]
const array_2 = ["a","b","c"];
array_2.splice(2, 0, "A", "B"); // 3番目に複数挿入
console.log(array_2);
//==> ["a", "b", "A", "B", "c"]
配列の指定したindexに対して要素の置換 splice
{array}.splice(
操作開始位置index , //第1引数:必須
開始位置から削除する要素数, //第2引数:オプション(0以上の値が入る)
削除操作後に追加する値 //第3引数:オプション
)
const array_1 = ["a","b","c"];
array_1.splice(1, 1, "A"); // 2番目を置換(第2引数が1 => 開始位置から1つ削除)
console.log(array_1);
//==> ["a", "A", "c"]
const array_2 = ["a","b","c"];
array_2.splice(1, 1, "A", "B"); // 2番目に複数挿入(第2引数が1 => 開始位置から1つ削除)
console.log(array_2);
//==> ["a", "A", "B", "c"]
const array_3 = ["a","b","c"];
array_3.splice(1, 2, "A", "B"); // 2番目に複数挿入(第2引数が2 => 開始位置から2つ削除)
console.log(array_3);
//==> ["a", "A", "B"]
//上記の場合の時に第2引数が3以上
//(開始位置から配列の末尾までの個数より大きい数のとき)だとしても結果は同じ
配列の指定したindexに対して要素の削除 splice
{array}.splice(
操作開始位置index , //第1引数:必須
開始位置から削除する要素数, //第2引数:オプション(0以上の値が入る)
削除操作後に追加する値 //第3引数:オプション(使わない)
)
const array_1 = ["a","b","c"];
array_1.splice(1, 1); // 2番目を置換(第2引数が1 => 開始位置から1つ削除)
console.log(array_1);
//==> ["a", "c"]
const array_2 = ["a","b","c"];
array_2.splice(1, 1); // 2番目に複数挿入(第2引数が1 => 開始位置から1つ削除)
console.log(array_2);
//==> ["a", "c"]
const array_3 = ["a","b","c"];
array_3.splice(1, 2); // 2番目に複数挿入(第2引数が2 => 開始位置から2つ削除)
console.log(array_3);
//==> ["a"]
//上記の場合の時に第2引数が3以上
//(開始位置から配列の末尾までの個数より大きい数のとき)だとしても結果は同じ
変換
数値から文字列 toString()
{数値}.toString();
/** 数値から文字列 */
const number = 12345
const stringNum = number.toString();
console.log(stringNum);
//==> "12345"
数値の前を”0″で埋めて固定長文字列へ変換 padStart()
{文字列}.padStart( 桁数 , 埋めるのに使う文字 );
/** 数値の前を"0"で埋めて固定長文字列へ変換 */
const number = 123;
const stringNum = number.toString();
//5文字で表現できるように先頭を0で埋める
const leftFillNum = stringNum.padStart(5, 0);
console.log(leftFillNum);
//==> "00123"
公式 String.prototype.padStart()
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/padStart
数字列から数値へ parseInt(), parseFloat()
parseInt( 数字列 );
parseFloat( 数字列の少数 );
/** 数字列から数値へ
* parseInt(string number) 数字列
* parseFloat(string float) 少数の文字列
*/
//正の数字列
const stringPlusNum = "123";
console.log( parseInt(stringPlusNum) );
//==> 123
//負の数字列
const stringMinusNum = "-123";
console.log( parseInt(stringMinusNum) );
//==> -123
//0埋めした数字列
const zeroFillNum = "000123";
console.log( parseInt(zeroFillNum) );
//==> 123
//※"-000123"では -123 が出力される
//2進数表記の数字列
const binaryNum = "0111";
console.log( parseInt(binaryNum, 2) );
//==> 7
//16進数表記の数字列
const hexadecimal = "ff";
console.log( parseInt(hexadecimal, 16) );
//==> 255
//少数の数字列
const floatNum = "1.23";
console.log( parseFloat(floatNum) ); //parseFloat ★
//==> 1.23
文字列の1文字1文字を配列へ Array.from()
Array.from( 文字列 );
/**文字列の1文字1文字を配列へ*/
const text = "abcd";
const textArray = Array.from(text);
console.log(textArray)
//==> [ "a", "b", "c", "d" ]
文字列の区切り文字ごと配列へ split()
{文字列}.split(“,”);
const text = "aa,bb,cc,dd";
const array = text.split(",");//カンマを区切りとして使う場合
console.log(array);
//=>["aa", "bb", "cc", "dd"]
配列から文字列へ join()
{配列}.join( 要素間に入れたい文字or空文字 “” も可 );
const array = ["a", "b", "c", "d"];
const text_1 = array.join("");
console.log(text_1);
//=> "abcd"
//カンマを配列の要素間に入れて繋げる場合
const text_2 = array.join(",");
console.log(text_2);
//=> "a,b,c,d"
検索 find()
{配列}.find( ( 要素 ) => 条件 );
//index番号順に配列の要素を検索していき、
//条件が真になるものであればその値を返す
//※最初に該当した値のみ返す
const array = [1,6,3,8,5,9];
const number_1 = array.find((element)=> element > 5);
console.log(number_1);
//==> 6
//条件に該当するものが無い時
const number_2 = array.find((element)=> element > 10);
console.log(number_2);
//==> undefined
配列から条件を満たす要素のみに抽出し、新しく配列を作成する filter()
{配列}.filter( ( 要素 ) => 条件 );
const array = [1,6,3,8,5,9];
const newArray_1 = array.filter((element)=> element > 5);
console.log(array);
//==> [ 1, 6, 3, 8, 5, 9 ]
console.log(newArray_1);
//==> [ 6, 8, 9 ]
//条件に該当するものが無い時
const number_2 = array.filter((element)=> element > 10);
console.log(number_2);
//==> []
//空の配列が出来上がる
配列に値が含まれているときtrueを返し、含まれていなければfalseを返す includes()
{配列}.includes( 値 )
const array = [2,3,1,6,9];
console.log(array.includes(6));
//==> true
console.log(array.includes(5));
//==> false
const array = ["a","b","c","d","e"];
console.log(array.includes("d"));
//==> true
console.log(array.includes("x"));
//==> false
配列内を反転 reverse()
{配列}.reverse( )
const array_1 = [2,3,1,6,9];
console.log(array_1.reverse());
//==> [ 9, 6, 1, 3, 2 ]
const array_2 = ["a","b","c","d","e"];
console.log(array_2.reverse());
//==> [ "e", "d", "c", "b", "a" ]
文字列
文字列内に値が含まれているときtrueを返し、含まれていなければfalseを返す includes()
文字列.includes( 値 )
const text = "東京都墨田区押上1丁目1−2";
console.log(array.includes("墨田区"));
//==> true
console.log(array.includes("新宿区"));
//==> false
大文字・小文字 変換 toUpperCase() toLowerCase()
小文字の文字列.toUpperCase( )
//小文字 => 大文字
const lowerText = "abc";
console.log(lowerText.toUpperCase());
//==> "ABC"
//大文字 => 小文字
const upperText = "ABC";
console.log(lowerText.toLowerCase());
//==> "abc"
ソート
文字列のソートsort()
{配列}.sort( )
//アルファベット
const array_1 = ["banana","dog","apple","cat"];
const sortArray_1 = array_1.sort();
console.log(sortArray_1);
//==> [ "apple", "banana", "cat", "dog" ]
//ひらがな
const array_2 = ["うに","えい","いしだい","あじ","おこぜ",];
const sortArray_2 = array_2.sort();
console.log(sortArray_2);
//==> [ "あじ", "いしだい", "うに", "えい", "おこぜ" ]
数値のソート sort()
{配列}.sort( function( a , b ) { return a – b } )
{配列}.sort( ( a , b ) => a – b ) //アロー関数の書き方
const array = [4,2,9,1,7,5];
//昇順
const ascSortArray_1 = array.sort( function(a,b){ return a - b});
console.log(ascSortArray_1);
//==>[ 1, 2, 4, 5, 7, 9 ]
//アロー関数で書いた場合
const ascSortArray_2 = array.sort((a,b) => a - b);
console.log(ascSortArray_2);
//==>[ 1, 2, 4, 5, 7, 9 ]
//降順
const descSortArray_1 = array.sort( function(a,b){ return b - a});
console.log(descSortArray_1);
//==>[ 9, 7, 5, 4, 2, 1 ]
//アロー関数で書いた場合
const descSortArray_2 = array.sort((a,b) => b - a);
console.log(descSortArray_2);
//==>[ 9, 7, 5, 4, 2, 1 ]
終わりに
最後まで閲覧頂きありがとうございます!
せっかく閲覧いただいたので、コーディングテストの経験則からちょっとしたテスト対策のtipsを共有しますね🦈
- コーディング試験は大体の場合、コーディング試験サービスを運営している別会社のリンクが送られてきて、そこからweb上でコーディングすることになります。
- 試験の情報はほとんどないので、企業説明会で問題の内容や試験で使用できる言語を質問する、またはコーディングテストを運営している企業を調べ、受ける企業と対談している記事や動画などを探すことで、問題の傾向のヒントが手に入るときがあります😉
- 試験のパターンとしては、下記2種類かなと個人的に思ってます。(②はフロントエンドの選考に多いと思います)
- ①:3~4問の問題があり、時間制限内に文章から期待値を満たすことができるアルゴリズムを考え、コーディングする
- ②:①の試験時間の倍の時間(4hとか)で仕様を満たす簡単なwebアプリを作る(経験したものではtodoアプリがほとんどで、その企業が使っているフレームワークでの開発になります(自分の場合はVueでした))
- 過去問がないので、上記の①についてはアルゴリズムなどを学習できるようなサイトで学習するしかないと思います。②については参考書や公式のハンズオンで簡単なCRUD処理ができるアプリを作れるようになっておくと良いと思います。
以上、ざっくりですがテスト対策のtipsでした!
改めて、最後までありがとうございました。少しでも読まれた方のチカラになれれば幸いです。
コーディングテストに向けて頑張ってください!!
ではまた!