๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐Ÿ“„ Multi Dimensional Array

๋‹ค์ธต ๋ฐฐ์—ด๊ณผ ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐฐ์—ด ์กฐ์ž‘โ€‹

1. ์žฌ๊ท€๋ฅผ ์‚ฌ์šฉํ•œ ํ•ด๋ฒ•โ€‹

const multiArray = [
{ id: 1, name: 'Amy' },
[
{ id: 2, name: 'Pitt', detail: { age: 30 } },
{ id: 3, name: 'Riley', detail: { age: 25 } },
],
];

const findAgeById = (array, targetId) => {
for (let item of array) {
if (Array.isArray(item)) {
// item์ด ๋ฐฐ์—ด์ด๋ฉด findAgeById ํ•จ์ˆ˜๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ
const result = findAgeById(item, targetId);
// ํ•˜์œ„ ๋ฐฐ์—ด์—์„œ ์ฐพ์œผ๋ฉด ์ฆ‰์‹œ ๋ฐ˜ํ™˜
if (result !== undefined) {
return result;
}
} else if (item.id === targetId) {
// item์ด ๊ฐ์ฒด์ด๋ฉด ํ•ด๋‹น age๋ฅผ ๋ฐ˜ํ™˜
return item.detail && item.detail.age !== undefined
? item.detail.age
: 'No age';
}
}
return 'No age';
};

console.log(findAgeById(multiArray, 2)); // 30
console.log(findAgeById(multiArray, 4)); // No age
console.log(findAgeById(multiArray, 3)); // 25
console.log(findAgeById(multiArray, 1)); // No age

2. ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ์‚ฌ์šฉโ€‹

const multiArray = [
{ id: 1, name: 'Amy' },
[
{ id: 2, name: 'Pitt', detail: { age: 30 } },
{ id: 3, name: 'Riley', detail: { age: 25 } },
],
];

const dfsFindAgeById = (array, targetId) => {
const stack = [...array];
while (stack.length) {
const item = stack.pop();
if (Array.isArray(item)) {
stack.push(...item);
} else if (item.id === targetId) {
return item.detail && item.detail.age !== undefined
? item.detail.age
: 'No age';
}
}
return 'No age';
};

console.log(dfsFindAgeById(multiArray, 2)); // 30
console.log(dfsFindAgeById(multiArray, 4)); // No age
console.log(dfsFindAgeById(multiArray, 3)); // 25
console.log(dfsFindAgeById(multiArray, 1)); // No age

3. ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ์‚ฌ์šฉโ€‹

const multiArray = [
{ id: 1, name: 'Amy' },
[
{ id: 2, name: 'Pitt', detail: { age: 30 } },
{ id: 3, name: 'Riley', detail: { age: 25 } },
],
];

const bfsFindAgeById = (array, targetId) => {
const queue = [...array];
while (queue.length) {
const item = queue.shift();
if (Array.isArray(item)) {
queue.push(...item);
} else if (item.id === targetId) {
return item.detail && item.detail.age !== undefined
? item.detail.age
: 'No age';
}
}
return 'No age';
};

console.log(bfsFindAgeById(multiArray, 2)); // 30
console.log(bfsFindAgeById(multiArray, 4)); // No age
console.log(bfsFindAgeById(multiArray, 3)); // 25
console.log(bfsFindAgeById(multiArray, 1)); // No age