JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで文字列の二次元配列をソートして対角要素を見つける方法

本記事では、文字列の配列を扱うJavaScriptのアルゴリズム問題を解説します。「配列をアルファベット順にソートした後、対角線上の文字を抽出する」というシンプルながら応用範囲の広いテクニックを、サンプルコードとともにわかりやすく紹介します。

問題

n個の文字列を要素として持つ配列を受け取るJavaScript関数を作成します。ここで、配列内の各文字列はすべてちょうどn文字で構成されているものとします。つまり、この配列はn×nの正方行列として扱うことができます。

関数には以下の2つの処理が求められます。

  • まず、配列をアルファベット順(辞書順)にソートすること
  • 次に、ソート後の配列を行列とみなし、左上隅から始まる主対角線上にある文字を抽出して連結した文字列を返すこと

コード例

以下が実際のコードです。

const arr = [
   'star',
   'abcd',
   'calm',
   'need'
];
const sortPickDiagonal = () => {
   const copy = arr.slice();
   copy.sort();
   let res = '';
   for(let i = 0; i < copy.length; i++){
      for(let j = 0; j < copy[i].length; j++){
         if(i === j){
            res = res + copy[i][j];
         };
      };
   };
   return res;
};
console.log(sortPickDiagonal(arr));

出力結果

aaer

処理の流れの解説

このコードでは、まずslice()メソッドで元の配列のコピーを作成しています。こうすることで、元の配列を変更せずに済むのがポイントです。続いてsort()メソッドにより、配列がアルファベット順に並べ替えられます。

ソート後の配列は ['abcd', 'calm', 'need', 'star'] となります。二重ループの中で、行インデックスiと列インデックスjが一致している場合、すなわち対角要素である場合のみ、その文字を結果の文字列に追加していきます。

今回の例では、以下の4文字が対角要素として抽出されます。

  • 0行0列目:「abcd」の「a」
  • 1行1列目:「calm」の「a」
  • 2行2列目:「need」の「e」
  • 3行3列目:「star」の「r」

これらを連結すると「aaer」となり、コンソールに出力されます。なお、条件判定を利用すれば反対側の対角線(副対角線)の要素を取得することも可能なので、ぜひ応用してみてください。

  1. JavaScriptで配列を降順に並べ替えて隣接要素の差の合計を求める方法

    問題 整数の配列を受け取るJavaScript関数を作成する必要があります。この関数は、配列を降順に並べ替えたうえで、隣り合う要素同士の差を順番に足し合わせ、その合計値を返すものです。 たとえば、次のような配列が渡された場合を考えてみましょう。 [6, 2, 15] この場合、期待される出力は次のとおりです。 (15 - 6) + (6 - 2) = 13 解決のアプローチ この問題は、以下の手順でシンプルに解くことができます。 sort()メソッドを使い、配列を降順(大きい順)に並べ替える。 隣接する2つの要素(i番目と i + 1 番目)の差を計算し、合計に加算していく。 配列の要素

  2. 【JavaScript】配列内で最も頻出する単語を上位N件抽出する方法

    問題概要英小文字のみで構成された文字列の配列 arr を第一引数として受け取り、数値 num(num は配列の長さより小さい値)を第二引数として受け取る JavaScript 関数を作成します。この関数は、配列 arr 内で最も頻出する要素を上位 num 件返す必要があります。結果は出現回数が多い順に並べます。また、出現回数が同じ単語が複数ある場合は、辞書順(アルファベット順)で先に来る単語を優先して並べます。入力例const arr = [the, day, is, sunny, the, the, the, sunny, is, is]; const num = 4;出力例const ou