Skip to content

Latest commit

ย 

History

History
99 lines (63 loc) ยท 4.79 KB

Array_like_Object.md

File metadata and controls

99 lines (63 loc) ยท 4.79 KB

์œ ์‚ฌ ๋ฐฐ์—ด๊ฐ์ฒด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ๊ด€ ๋ฐฐ์—ด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ช…์„ ํ‚ค, ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐ’์ด๋ผ๊ณ  ํ•˜๋ฉฐ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ๋‹ค์ค‘๊ฐ’ ๋ฐ์ดํ„ฐ ํ‘œํ˜„์œผ๋กœ์„œ์˜ ๊ฐ์ฒด๋ผ๊ณ  ํ•œ๋‹ค.

์ด ๊ธ€์—์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์—ฐ๊ด€ ๋ฐฐ์—ด๊ณผ ๊ด€๋ จ๋œ ์šฉ์–ด๋ฅผ ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด๋ฉด, ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆซ์ž๋ฅผ ํ‚ค๋กœ ๊ฐ’์„ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ๋ฐฐ์—ด์˜ ํ‚ค๋Š” ์—ฐ์†ํ•˜๋Š” ์ˆซ์ž์ด๋ฏ€๋กœ ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ๊ฐ’์˜ ๋ชจ์Œ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.

์ˆซ์ž ์ด์™ธ์˜ ํ‚ค๋Š” ๋Œ€๋ถ€๋ถ„ ๋ฌธ์ž์—ด์ด์ง€๋งŒ ๋ฌธ์ž์—ด์— ํ•œ์ •๋˜์ง€ ์•Š๊ณ  ์ž„์˜์˜ ํƒ€์ž…์ธ ํ‚ค๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‚ค์™€ ๊ฐ’์˜ ๋ชจ์Œ์„ ๋‹ค๋ฃจ๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์—ฐ๊ด€ ๋ฐฐ์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค. ์—ฐ๊ด€ ๋ฐฐ์—ด์„ ๋งต์ด๋‚˜ ์‚ฌ์ „์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์–ธ์–ด๋„ ์žˆ์œผ๋ฉฐ, ๋‚ด๋ถ€ ๊ตฌํ˜„์—์„œ๋Š” ํ•ด์‹œ(hash)๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์–ธ์–ด๋„ ์žˆ๋‹ค.

์ด๋ฆ„๋งŒ ๋‹ค๋ฅผ ๋ฟ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋Š” ๊ฒฐ๊ตญ ๊ฐ™์€ ๋ชจ์–‘์ธ๋ฐ, ์–ด๋–คย ์ด๋ฆ„์œผ๋กœ ์“ฐ๋“  ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ ์—ฐ๊ด€ ๋ฐฐ์—ด์ด๋ผ๋Š” ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ž.

์—ฐ๊ด€ ๋ฐฐ์—ด์˜ ์ฃผ๋œ ์šฉ๋„๋Š” ํ‚ค๋กœ ๊ฐ’์„ ๋ฝ‘์•„๋‚ด๋Š” ์กฐ์ž‘์ด๋‹ค.

๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด, ํŠนํžˆ ์Šคํฌ๋ฆฝํŠธ ๊ณ„์—ด ์–ธ์–ด๋Š” ์–ธ์–ด ๊ธฐ๋Šฅ์œผ๋กœ ์—ฐ๊ด€ ๋ฐฐ์—ด ํƒ€์ž…์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์—ฐ๊ด€ ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

๊ฒฐ๊ตญ, ์—ฐ๊ด€ ๋ฐฐ์—ด์šฉ ๊ฐ์ฒด๊ฐ€ ๋”ฐ๋กœ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ ์‹œ์„ ์œผ๋กœ ๋ณด๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๊ฐ์ฒด๋ฅผ ์—ฐ๊ด€ ๋ฐฐ์—ด๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด๋กœ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋‹ค.

์œ ์‚ฌ ๋ฐฐ์—ด๊ฐ์ฒด(=์—ฐ๊ด€ ๋ฐฐ์—ด)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” length ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผย **์œ ์‚ฌย ๋ฐฐ์—ด๊ฐ์ฒด(array-like objects)**๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ผ๋ฐ˜ ๊ฐ์ฒด์— length ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณธ๋‹ค๋ฉด ๊ทธ ์ผ๋ฐ˜ ๊ฐ์ฒด๋Š” ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒด์ด๋ฉฐ ์ด๋Ÿฌํ•œ ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒด์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง•์€ ๊ฐ์ฒด์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ํ‘œ์ค€ ๋ฐฐ์—ด๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

var arr = ['foo'];

// ๋ฐฐ์—ด ํ‘œ์ค€๋ฉ”์„œ๋“œ์ธ push๋กœ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
arr.push('bar');
console.log(arr); // ['foo', 'bar'] ๊ธฐ๋ก

var obj = {
    name : 'jaehee',
    length : 1
};

// obj๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด์ง€๋งŒ lengthํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์ •ํ•ด ์คŒ
// ๋˜‘๊ฐ™์ด ํ‘œ์ค€๋ฉ”์„œ๋“œ์ธ push๋กœ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
obj.push('pub');
console.log(obj); // Uncaught TypeError: undefined is not a function => error ๋ฐœ์ƒ

ํ•˜์ง€๋งŒ ์ผ๋ฐ˜ ๊ฐ์ฒด๊ฐ€ ํ”„๋กœํ† ํƒ€์ž…๊ณผ apply() ๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ์ฒด์ด์ง€๋งŒ ํ‘œ์ค€ ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ์ฝ”๋“œ์—์„œ length ํ”„๋กœํผํ‹ฐ๋ฅผ ์ง€์ •ํ•œ ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒด์ธ obj๋Š” ๋‹น์—ฐํžˆ ๋ฐฐ์—ด์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ์ธ push() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

var obj = {
    name : 'jaehee',
    length: 1
};

Array.prototype.push.apply(obj,['pub']);
console.log(obj);

์œ„์˜ ์ฝ”๋“œ๋Š” ์œ ์‚ฌ๋ฐฐ์—ด๊ฐ์ฒด์ธ obj์— ๋Œ€ํ•ด push() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ pub์„ ์ถ”๊ฐ€ํ•˜๋ฉด, ์‹ค์ œ๋กœ obj ๊ฐ์ฒด์˜ '1'ํ”„๋กœํผํ‹ฐ์— 'pub'์ด ์ถ”๊ฐ€๋˜๊ณ  length ๊ฐ’์€ 2๋กœ ์ฆ๊ฐ€ํ•œ ๊ฒƒ์„ ํ™•์ธ ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์œ ์‚ฌ ๋ฐฐ์—ด๊ฐ์ฒด๋Š”ย arguments ๊ฐ์ฒด๋‚˜ย jQuery ๊ฐ์ฒด๊ฐ€ ์ด๋Ÿฌํ•œ ์œ ์‚ฌ๋ฐฐ์—ด ๊ฐ์ฒดํ˜•ํƒœ๋กœ ๋˜์–ด์žˆ๋‹ค.

๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š”ย []ย ์—ฐ์‚ฐ์ž๋Š”ย ์‹๋ณ„์ž(์‹๋ณ„์ž๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํ”„๋กœ๊ทธ๋žจ ์ƒ์— ์ง์ ‘ ์ฝ”๋”ฉํ•˜์—ฌ ๋„ฃ๊ธฐ ๋•Œ๋ฌธ์— ์ •์ ์ด๋‹ค)ย ๋Œ€์‹ , ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์‹œ๊ฐ„์— ๋™์ ์œผ๋กœ ์–ผ๋งˆ๋“ ์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํผํ‹ฐ์˜ ์ด๋ฆ„์„ ํ‘œํ˜„ํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ด๋ฅผย **์—ฐ๊ด€ ๋ฐฐ์—ด(associative array)**์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

์—ฐ๊ด€ ๋ฐฐ์—ด์€ ๋™์ ์œผ๋กœ ์ž„์˜์˜ ๊ฐ’๊ณผ ์ž„์˜์˜ ๋ฌธ์ž์—ด์„ ์—ฐ๊ด€์ง€์–ด ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

์ด์™€ ๊ด€๋ จํ•˜์—ฌ '๋Œ€์‘์‹œํ‚ค๋‹ค(map)'๋ผ๋Š” ์šฉ์–ด๋„ ์ž์ฃผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰,ย **"์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ฌธ์ž์—ด(ํ”„๋กœํผํ‹ฐ์˜ ์ด๋ฆ„)์„ ์ž„์˜์˜ ๊ฐ’์œผ๋กœ ๋Œ€์‘์‹œํ‚จ๋‹ค"**์™€ ๊ฐ™์ด ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

Array.from

ES6์—์„œ ์ƒˆ๋กœ ์ƒ๊ธด ๋ฌธ๋ฒ•์ธ Array.from()์„ ์‚ฌ์šฉํ•ด์„œ๋„ ์œ ์‚ฌ๋ฐฐ์—ด์„ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ค€๋‹ค.

function from() {
    let arr = Array.from(arguments);
    arr.forEach((value, key) => {
        console.log(`${value} : ${key}`);
    });
}

from('1', '2', '3')

์ด์™ธ์˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

[].forEach.call(['1', '2'], (el) => console.log(el))

Reference