JavaScriptで2進数の配列を対応する整数に変換する方法
まず、0と1だけを含む数値の配列を用意します。
const arr = [0, 1, 0, 1];
ここでの課題は、配列に対して呼び出すと、その配列が表す2進数に対応する10進数の整数を返す関数 toBinary() を作成することです。
例えば、配列が以下の場合を考えてみましょう。
const arr = [1, 0, 1, 1];
この場合の出力は 11 になるはずです。2進数「1011」の10進数表現が11だからです。それでは、この関数を実装していきましょう。
方法1: parseInt() ライブラリメソッドを使う
JavaScriptには parseInt() という組み込みメソッドがあります。このメソッドは2つの引数を受け取ります。1つ目は解析対象の文字列、2つ目は基数を表す数値です(10進数なら10、2進数なら2など)。指定された基数に従って文字列を解析し、対応する整数を返します。
2進数の配列を10進数に変換する場合は、join() で配列を文字列に結合してから、parseInt() を次のように使います。
const arr = [1, 0, 1, 1];
const parseArray = arr => {
const binaryString = arr.join("");
return parseInt(binaryString, 2);
};
console.log(parseArray(arr));この方法はコードが簡潔で読みやすいのが特徴ですが、配列の長さが非常に長くなると、中間の文字列生成によるオーバーヘッドが発生します。
方法2: reduce() とビット演算を使う
もうひとつの方法として、reduce() を使って配列を反復処理しながら、対応する2進数から直接10進数を構築するやり方があります。左シフト演算子(<<)を使って累積値を毎回1ビット左にシフトし、シフト後の累積値と現在の要素とのビット単位OR(|)を取ることで、新しい桁を加算していきます。
具体的には、「累積値 × 2 + 現在のビット」という計算と同じ意味になり、2進数から10進数への変換が効率的に行えます。
サンプルコード
const arr = [1, 0, 1, 1];
const parseArray = arr => {
return arr.reduce((acc, val) => {
return (acc << 1) | val;
});
};
console.log(parseArray(arr));このアプローチは文字列の中間生成を行わないため、大きな配列でもパフォーマンス面で有利です。ただし、JavaScriptのビット演算は32ビット整数で行われるため、32ビットを超える長さの配列には注意が必要です。
実行結果
どちらの方法でも、コンソールには以下の出力が表示されます。
11
-
JavaScriptで配列をJSONに変換する方法|JSON.stringify()の使い方を解説
JavaScriptで配列をJSON形式の文字列に変換するには、JSON.stringify()メソッドを使います。このメソッドは、配列やオブジェクトを引数として渡すだけで、JSON形式の文字列を簡単に生成できる非常に便利な機能です。 サンプルコード 以下は、ボタンをクリックすると配列がJSONに変換されて画面に表示されるシンプルなデモです。 <!DOCTYPE html> <html> <head> <style> body { font-family: "Segoe
-
JavaScriptで配列をセット(Set)に変換する方法|new Set()の使い方を解説
JavaScriptでは、new Set() コンストラクタを使うことで、配列を簡単にセット(Setオブジェクト)へ変換できます。セットは同じ値を自動的に1つだけ保持する性質を持つため、配列から重複した要素を取り除きたい場合にも非常に便利です。 配列をセットに変換するサンプルコード 以下は、ボタンをクリックすると配列がセットに変換されて表示される、完全なHTMLサンプルです。 <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport co