JavaScript에서 2차원 객체 배열 내 특정 객체의 위치(인덱스)를 찾으려면 이중 for 루프를 사용하면 됩니다. 바깥쪽 루프는 행(row)을 순회하고, 안쪽 루프는 열(column)을 순회하면서 각 객체의 속성값을 비교합니다.
아래 예제에서는 학생 이름(studentName)을 기준으로 2차원 배열에서 해당 객체가 위치한 행과 열의 인덱스를 반환하는 함수를 구현했습니다.
예제 코드
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);코드 설명
matrixIndexed함수는 2차원 배열과 찾고자 하는 이름을 매개변수로 받습니다.- 바깥쪽 루프(
r)가 각 행을 순회하고, 안쪽 루프(c)가 해당 행의 각 객체를 검사합니다. - 객체의
studentName속성이 찾는 이름과 일치하면 즉시{ r, c }형태로 행과 열 인덱스를 반환합니다. - 끝까지 검색해도 일치하는 항목이 없으면 빈 객체
{}를 반환합니다.
프로그램 실행 방법
위 프로그램을 실행하려면 다음 명령어를 사용합니다.
node fileName.js
출력 결과
여기서는 파일명이 demo160.js라고 가정합니다. 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
PS C:\Users\Amit\JavaScript-code> node demo160.js 1 1
결과를 해석해 보면, 'Bob'이라는 학생은 두 번째 행(인덱스 1)의 두 번째 열(인덱스 1)에 위치한다는 의미입니다. JavaScript 배열은 0부터 인덱싱되기 때문입니다.