【JavaScript】スペース区切りの数字文字列から仲間はずれの偶数・奇数を見つける方法
問題
スペースで区切られた数字を含む文字列を引数として受け取り、その中から「仲間はずれ」の数字を返すJavaScript関数を作成します。
入力される文字列には、すべて奇数の中に偶数が1つだけ含まれているか、あるいはすべて偶数の中に奇数が1つだけ含まれているという特徴があります。関数の目的は、その唯一の異なる数字を見つけ出して返すことです。
サンプルコード
以下が実装例です。
const str = '2 4 7 8 10';
const findDifferent = (str = '') => {
const odds = [];
const evens = [];
const arr = str
.split(' ')
.map(Number);
arr.forEach(num => {
if(num % 2 === 0){
evens.push(num);
}else{
odds.push(num);
};
});
return odds.length === 1 ? odds[0] : evens[0];
};
console.log(findDifferent(str));
コードの解説
この関数の処理の流れは次の通りです。
- split(' '):文字列をスペースで分割し、配列に変換します。
- map(Number):各要素を文字列から数値型に変換します。
- forEach:各数字を判定し、2で割った余りが0なら偶数用の配列へ、そうでなければ奇数用の配列へ振り分けます。
- 最後に、奇数の個数が1つであればその値を返し、そうでない場合(=偶数が1つしかない場合)は偶数配列の先頭の要素を返します。
三項演算子を使うことで、どちらのグループが「少数派」なのかを簡潔に判定できるのがポイントです。
出力結果
コンソールには以下のように出力されます。
7
この例では「2 4 7 8 10」という文字列に偶数が4つ、奇数が1つ(7)含まれているため、仲間はずれである「7」が返されます。逆に奇数が多数派で偶数が1つだけの文字列を渡した場合も、同様のロジックで正しく判定できます。
-
JavaScriptで配列内の唯一の異なる文字列を見つける方法
問題 文字列の配列を受け取るJavaScript関数を作成する必要があります。配列内のすべての文字列は同じ文字(またはその並べ替え)で構成されていますが、ただ1つの文字列だけが異なる文字セットを含んでいます。この関数の目的は、その唯一の文字列を見つけ出して返すことです。 例: 次のような配列が与えられたとします。 [ba, abc, acb, bac, foo, bca, cab, cba] この場合、求めるべき文字列は「foo」です。 文字列には空白が含まれることがありますが、空白自体は意味を持たず、空白以外の記号のみが判定の対象となります。たとえば、空白だけで構成された文字列は空文字列と
-
JavaScriptで指定した範囲内にある「ある数で割り切れる数」の個数を求める方法
問題2つの整数からなる範囲(配列)を第1引数に、1つの数値を第2引数として受け取るJavaScript関数を作成する必要があります。この関数は、指定された範囲内に存在する「入力された数値で割り切れる数」をすべて見つけ、その合計個数を返します。サンプルコード以下がその実装例です。const range = [6, 57]; const num = 3; const findDivisibleCount = (num = 1, [l, h]) => { let count = 0; for(let i = l; i <= h; i++