JavaScriptで値が配列に存在するかチェックして次の要素を取得する方法
概要
本記事では、文字列の配列を第一引数、検索対象の値を第二引数として受け取るJavaScript関数を作成します。この関数は配列内から指定された値を検索し、その値が存在すれば配列内の次の要素を返し、存在しなければfalseを返すものです。
コード例
const arr = ["", "comp", "myval", "view", "1"]
const getNext = (value, arr) => {
const a = [undefined].concat(arr);
const p = a.indexOf(value) + 1;
return a[p] || false;
}
console.log(getNext('comp', arr)); // myval
console.log(getNext('foo', arr)); // false出力結果
コンソールには以下のように出力されます。
myval false
コードの解説
この実装のポイントは以下の3点です。
[undefined].concat(arr):元の配列の先頭にundefinedを連結しています。これにより、各要素のインデックスが1つずつ後ろにずれ、「次の要素」へのアクセスが容易になります。a.indexOf(value) + 1:検索値の位置の「次」のインデックスを計算します。値が見つからない場合、indexOf()は-1を返すため、+1すると0となり、先頭に追加したundefinedを参照することになります。a[p] || false:取得した要素がundefinedなどのfalsyな値であればfalseを返します。
注意点
この方法では、次の要素が空文字列("")の場合もfalsyと判定されてfalseが返される点に注意が必要です。より厳密に判定したい場合は、includes()で存在確認を行ってから要素を取り出す方法が有効です。
別のアプローチ:includes() を使う方法
const getNext = (value, arr) => {
if (!arr.includes(value)) return false;
const i = arr.indexOf(value);
return i === arr.length - 1 ? false : arr[i + 1];
}
console.log(getNext('comp', arr)); // myval
console.log(getNext('foo', arr)); // falseこちらの方法では、次の要素が空文字列であっても正しくその値が返されます。また、検索値が配列の末尾にある場合(次の要素が存在しない場合)にもfalseを返すため、意図が明確で読みやすい実装といえます。用途に応じて使い分けるとよいでしょう。
-
JavaScriptで配列の最小値と最大値を返す関数の作成方法
問題配列を受け取り、新しい配列を返すJavaScript関数を作成する必要があります。戻り値となる配列の最初の要素には入力配列の最小値を、2番目の要素には最大値を格納します。コード例以下のコードでは、Array.prototype.reduce()メソッドを使用して、配列を一度だけ走査しながら最小値と最大値を同時に求めています。const arr = [56, 34, 23, 687, 2, 56, 567]; const findMinMax = (arr = []) => { const creds = arr.reduce((acc,
-
JavaScriptで配列内の正の数の個数と負の数の合計を返す方法
問題正の数と負の数が混在する整数の配列を受け取り、1つ目の要素に正の数の個数、2つ目の要素に負の数の合計を格納した新しい配列を返すJavaScript関数を作成する必要があります。例えば、入力配列が [1, 2, 1, -2, -4, 2, -6, 2, -4, 9] の場合、正の数は6個、負の数の合計は -16 となるため、出力は [6, -16] になります。実装例以下がそのコードです。const arr = [1, 2, 1, -2, -4, 2, -6, 2, -4, 9]; const posNeg = (arr = []) => { const cr