JavaScriptで配列の要素間に演算子オブジェクトを挿入する方法
次のような数値の配列があるとします。
const numbers = [1, 6, 7, 8, 3, 98];
この数値の配列を、各要素が「value」というキーを持ち、その値として元の配列の要素を格納するオブジェクトの配列へと変換することを目指します。
それに加えて、隣り合う2つの要素の間には「operation」というキーを持つオブジェクトを挿入し、その値としては +、-、*、/ の中から順番に1つずつ使用します。
したがって、numbers 配列の場合、期待される出力は以下のようになります。
[
{ "value": 1 }, { "operation": "+" }, { "value": 6 }, { "operation": "-"},
{ "value": 7 }, { "operation": "*" }, { "value": 8 }, { "operation":"/" },
{ "value": 3 }, { "operation": "+" }, {"value": 98}
]それでは、この変換を実現するコードを実際に書いてみましょう。
サンプルコード
const numbers = [1, 6, 7, 8, 3, 98, 3, 54, 32];
const insertOperation = (arr) => {
const legend = '+-*/';
return arr.reduce((acc, val, ind, array) => {
acc.push({
"value": val
});
if(ind < array.length-1){
acc.push({
"operation": legend[ind % 4]
});
};
return acc;
}, []);
};
console.log(insertOperation(numbers));コードの解説
このコードでは、Array.prototype.reduce() メソッドを活用しています。reduce は第2引数として渡された空の配列 [] を初期値(アキュムレータ)とし、元の配列の各要素を先頭から順番に処理していきます。
各ステップでは、まず現在の要素を格納した { value: 要素 } オブジェクトを結果の配列に追加します。その後、現在の要素が配列の最後の要素でない場合(ind < array.length - 1)、続けて { operation: 演算子 } オブジェクトも追加します。これにより、値と演算子が交互に並ぶ構造が自然に実現されます。
演算子の選択には、文字列 '+-*/' を用意し、legend[ind % 4] の形式で参照しています。インデックスを4で割った余りを利用することで、+、-、*、/ の4種類の演算子が先頭から順に循環して使用される仕組みになっています。
出力
上記のコードをコンソールで実行すると、出力は次のようになります。
[
{ value: 1 }, { operation: '+' },
{ value: 6 }, { operation: '-' },
{ value: 7 }, { operation: '*' },
{ value: 8 }, { operation: '/' },
{ value: 3 }, { operation: '+' },
{ value: 98 }, { operation: '-' },
{ value: 3 }, { operation: '*' },
{ value: 54 }, { operation: '/' },
{ value: 32 }
]-
JavaScriptで配列の中から最大値を取得して返す方法
本記事では、数値の配列を受け取り、その中から最大の要素を見つけ出して返すJavaScript関数の実装方法を解説します。関数は配列を先頭から順に走査し、要素同士を比較しながら最も大きい値を特定する仕組みです。サンプルコード実際のコードは以下のようになります。const arr = [5, 3, 20, 15, 7]; const findGreatest = (arr = []) => { let greatest = -Infinity; if(!arr?.length){ return nu
-
JavaScriptで配列の最小値と最大値を返す関数の作成方法
問題配列を受け取り、新しい配列を返すJavaScript関数を作成する必要があります。戻り値となる配列の最初の要素には入力配列の最小値を、2番目の要素には最大値を格納します。コード例以下のコードでは、Array.prototype.reduce()メソッドを使用して、配列を一度だけ走査しながら最小値と最大値を同時に求めています。const arr = [56, 34, 23, 687, 2, 56, 567]; const findMinMax = (arr = []) => { const creds = arr.reduce((acc,