JavaScriptでオブジェクトを含む二次元配列のインデックスを検索する方法
JavaScriptでオブジェクトを格納した二次元配列から特定の要素のインデックス(位置)を調べたい場合、「行(row)」を走査するループと「列(column)」を走査するループの2つのforループを組み合わせて使用します。以下に具体的な実装例を示します。
サンプルコード
function matrixIndexed(details, name) {
var r;
var c;
for (r = 0; r < details.length; ++r) {
const nsDetails = details[r];
for (c = 0; c < nsDetails.length; ++c) {
const tempObject = nsDetails[c];
if (tempObject.studentName === name) {
return { r, c};
}
}
}
return {};
}
const details = [
[
{studentName: 'John'}, {studentName:'David'}
],
[
{studentName:"Mike"},{studentName:'Bob'},{studentName:'Carol'}
]
];
var {r, c } = matrixIndexed(details, 'Bob');
console.log(r, c);
コードのポイント
- 外側のforループで各行(details[r])を順番に取り出します。
- 内側のforループでその行内の各オブジェクトをチェックし、条件に一致すれば
{ r, c }という形式で行番号と列番号をまとめて返します。 - 見つからなかった場合は空のオブジェクト
{}を返します。 var {r, c} = matrixIndexed(details, 'Bob');のように分割代入を使えば、戻り値を行番号と列番号として個別に受け取れます。
実行方法
上記のプログラムを実行するには、Node.js環境で次のコマンドを使用します。
node fileName.js.
出力結果
ここでは、ファイル名を demo160.js として保存しています。実行すると以下のような出力が得られます。
PS C:\Users\Amit\JavaScript-code> node demo160.js 1 1
この結果は、'Bob' という名前の学生が行番号1・列番号1の位置に存在することを示しています。つまり、二次元配列 details の2行目の2番目の要素に該当します。このように二重ループによる全件探索を行うことで、ネストされた配列内の任意のオブジェクトの正確な位置を特定できます。
-
JavaScriptでIDごとにオブジェクトの配列をグループ化する方法
JavaScriptでオブジェクトの配列をidなどの特定のキーごとにグループ化したい場合、reduce()メソッドを使うと簡潔に実装できます。この記事では、どのプロパティにも対応できる汎用的なgroupBy関数を作成し、実際のサンプルコードとともにその仕組みを詳しく解説します。 reduce()によるグループ化の考え方 reduce()は、配列の各要素を順番に処理しながら、1つの累積値(ここではオブジェクト)を組み立てていくメソッドです。各要素からキーの値を取り出し、その値がまだ結果オブジェクトに存在しなければ新しい配列を作成して、そこへ要素を追加していくことでグループ化を実現します。 サ
-
JavaScriptでネストされた配列の要素数に基づいてオブジェクトの配列をソートする方法
JavaScriptでは、オブジェクトの中にネストされた配列を含むデータ構造を扱うことがよくあります。例えば、次のような「elements」という配列プロパティを持つオブジェクトの配列を考えてみましょう。const arr = [ { name: Cat1, elements: [ { name: name, id: id } ] }, { name: Cat2, elements: [ { name: name, id: id }, &n