๐Ÿ’ป๐Ÿ’€/๊ฐœ๋ฐœ

[JS] ๋ฐฐ์—ด APIs: splice์™€ slice์˜ ๋น„๊ต

db2 2021. 8. 19. 15:03

TL;DR

  1. slice() ๋ฉ”์„œ๋“œ๋Š” ๋ณต์‚ฌ+์ถ”์ถœ์˜ ๊ฐœ๋…, splice() ๋ฉ”์„œ๋“œ๋Š” ์ œ๊ฑฐ+์ถ”์ถœ์˜ ๊ฐœ๋…์ด๋‹ค.
  2. ๋•Œ๋ฌธ์— ์›๋ณธ ๋ฐฐ์—ด์ด ์œ ์ง€๋˜์–ด์•ผ ํ•  ๋•Œ๋Š” slice() ๋ฉ”์„œ๋“œ๋ฅผ, ์›๋ณธ ๋ฐฐ์—ด์„ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ๋Š” splice() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  3. ํŠนํžˆ ์š”์†Œ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ๊ณง๋ฐ”๋กœ ๊ทธ ์œ„์น˜์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด splice() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฌธ์ œ

์•„๋ž˜ array ๋ฐฐ์—ด์˜ ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ ์ฑ„, ๋งจ ์•ž์˜ ๋‘ ์›์†Œ๊ฐ€ ์ œ๊ฑฐ๋œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ์ถœ๋ ฅํ•˜๋ ค๊ณ  ํ•œ๋‹ค. ๋‘˜ ์ค‘ ์–ด๋–ค ๋ฉ”์„œ๋“œ๋ฅผ ์จ์•ผํ• ๊นŒ?

const array = [1, 2, 3, 4, 5];

1. splice()

Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements.

splice()๋Š” ๋ฐฐ์—ด์—์„œ ์›์†Œ๋“ค์„ ์ œ๊ฑฐํ•˜๊ณ , ์ œ๊ฑฐ๋œ ์›์†Œ๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ์ด๋‹ค. ํ•„์š”์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ์›์†Œ๋“ค์„ ์‚ฝ์ž…ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

โ—ฝ ์›์†Œ ์ œ๊ฑฐํ•˜๊ธฐ

splice(start: number, deleteCount?: number): T[];

  • start: ์ œ๊ฑฐ๋ฅผ ์‹œ์ž‘ํ•  ์œ„์น˜(์ธ๋ฑ์Šค 0์„ ๊ธฐ์ค€)
  • deleteCount
    • ์ด ์ œ๊ฑฐํ•  ์›์†Œ์˜ ๊ฐœ์ˆ˜
    • ์ƒ๋žตํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค ์›์†Œ๊นŒ์ง€ ์ „๋ถ€ ์ œ๊ฑฐ

๋งจ ์•ž์˜ ๋‘ ์›์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ธฐ ์œ„ํ•ด splice() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

const array = [1, 2, 3, 4, 5];
const newArray = array.splice(0, 2);

console.log(newArray); // [1, 2] 
console.log(array); // [3, 4, 5]

newArray ๋ณ€์ˆ˜์— 0๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ์ œ๊ฑฐ๋œ 2๊ฐœ์˜ ์š”์†Œ๊ฐ€ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜๋˜์–ด ๋‹ด๊ฒผ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์›๋ณธ ๋ฐฐ์—ด array ๋˜ํ•œ 2๊ฐœ์˜ ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋˜์–ด ๋ณ€๊ฒฝ๋˜์–ด๋ฒ„๋ ธ๋‹ค.

๋ฌธ์ œ์—์„œ array ์˜ ๊ฐ’์€ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์›๋ณธ ๋ฐฐ์—ด์ด ์œ ์ง€๋˜์–ด์•ผ ํ•  ๋•Œ์—” splice() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ์ ํ•ฉํ•œ ๋ฐฉ๋ฒ•์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด splice() ๋ฉ”์„œ๋“œ๋Š” ์–ธ์ œ ์‚ฌ์šฉํ•˜๋Š” ๊ฑธ๊นŒ?!

โ—ฝ ์›์†Œ ์‚ฝ์ž…ํ•˜๊ธฐ

splice() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ์ค‘๊ฐ„์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•ด์•ผํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

splice(start: number, deleteCount: number, ...items: T[]): T[];

  • start
    • ์ œ๊ฑฐ๋ฅผ ์‹œ์ž‘ํ•  ์œ„์น˜(์ธ๋ฑ์Šค 0์„ ๊ธฐ์ค€)
  • deleteCount
    • ์ด ์ œ๊ฑฐํ•  ์›์†Œ์˜ ๊ฐœ์ˆ˜(์ƒ๋žต ๋ถˆ๊ฐ€)
  • ...items
    • ๋ฐฐ์—ด์— ์ƒˆ๋กญ๊ฒŒ ์‚ฝ์ž…๋  ์›์†Œ๋“ค์„ ์ฝค๋งˆ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ „๋‹ฌ
    • ์ฒซ๋ฒˆ์งธ ์ธ์ž๋ฅผ ๊ธฐ์ค€ ์ธ๋ฑ์Šค๋กœ ํ•˜์—ฌ, ์ฐจ๋ก€๋Œ€๋กœ ๋ฐฐ์—ด์— ์‚ฝ์ž…
const array = [1, 2, 3, 4, 5];
const newArray = array.splice(0, 2, 10);

console.log(newArray); // [1, 2] 
// 0๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ๋ถ€ํ„ฐ 2๊ฐœ์˜ ์›์†Œ๊ฐ€ ์‚ญ์ œ๋˜๊ณ , ๊ทธ ์ž๋ฆฌ(0)์— 10์ด ์‚ฝ์ž…๋œ๋‹ค
console.log(array); // [10, 3, 4, 5]


const newArray2 = array.splice(1, 0, 11, 12);
// ๋ณ€๊ฒฝ๋œ array๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ธ๋ฑ์Šค 1์—์„œ๋ถ€ํ„ฐ 0๊ฐœ์˜ ์›์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค
// ๋”ฐ๋ผ์„œ newArray2์—๋Š” ๋นˆ ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋˜๋ฉฐ,
// ์›๋ณธ ๋ฐฐ์—ด array๋Š” ์ธ๋ฑ์Šค 1์—์„œ๋ถ€ํ„ฐ 11, 12๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ์‚ฝ์ž…๋˜์–ด ๋ณ€๊ฒฝ๋œ๋‹ค 
console.log(newArray); // [] 
console.log(array); // [10, 11, 12, 3, 4, 5]

์‚ญ์ œํ•  ์›์†Œ๊ฐ€ ์—†์–ด๋„ ๋‘๋ฒˆ์งธ ์ธ์ž์— ๊ฐ’์„ ์ „๋‹ฌํ•ด์•ผ ํ•จ์„ ์œ ์˜ํ•˜์ž. ์‚ฝ์ž…ํ•  ์›์†Œ๋“ค์€ ๋ฉ”์„œ๋“œ์˜ ์„ธ๋ฒˆ์งธ ์ธ์ž๋ถ€ํ„ฐ ๋„ฃ์–ด์ค˜์•ผ ์œ ํšจํ•˜๋‹ค!

2. slice()

Returns a section of an array.

slice() ๋ฉ”์„œ๋“œ๋Š” ํŠน์ • ์œ„์น˜์˜ ์›์†Œ๋“ค์„ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ splice() ๋ฉ”์„œ๋“œ์™€ ์ฐจ์ด๊ฐ€ ๋Š๊ปด์ง„๋‹ค. ์–ด๋””์—๋„ ๋ฐฐ์—ด์—์„œ ์›์†Œ๋ฅผ ์‚ญ์ œํ•œ๋‹ค๋Š” ๋ง์€ ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.

โ—ฝ ์›์†Œ ์ถ”์ถœํ•˜๊ธฐ

slice(start?: number, end?: number): T[];

  • start: ์ถ”์ถœํ•  ์‹œ์ž‘ ์œ„์น˜
  • end
    • ์ถ”์ถœ์˜ ์ข…๋ฃŒ ์œ„์น˜
    • ํ•ด๋‹น ์ธ๋ฑ์Šค์˜ ์›์†Œ๋Š” ์ถ”์ถœ์˜ ๋ฒ”์œ„์—์„œ ๋ฏธํฌํ•จ
    • ์ƒ๋žตํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์›์†Œ๊นŒ์ง€ ์ „๋ถ€ ํฌํ•จ

์ด๋ฒˆ์—๋Š” slice() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ์›์†Œ๋ฅผ ์ œ๊ฑฐํ–ˆ๋‹ค.

const array = [1, 2, 3, 4, 5];
const newArray1 = array.slice(2, 5);
const newArray2 = array.slice(2);

console.log(newArray1); // [3, 4, 5]
console.log(newArray2); // [3, 4, 5]
console.log(array); // [1, 2, 3, 4, 5]

newArray1 ์— 2๋ฒˆ์งธ ์ธ๋ฑ์Šค์—์„œ๋ถ€ํ„ฐ 4๋ฒˆ์งธ ์ธ๋ฑ์Šค(์ธ๋ฑ์Šค 5๋Š” ๋ฏธํฌํ•จ)์— ํ•ด๋‹นํ•˜๋Š” ์›์†Œ๋“ค์ด ์ถ”์ถœ๋˜์–ด ๋‹ด๊ฒผ๋‹ค. newArray2 ์—๋Š” ๋‘๋ฒˆ์งธ ์ธ์ž๊ฐ€ ์ƒ๋žต๋˜์–ด, ์ธ๋ฑ์Šค 2์—์„œ๋ถ€ํ„ฐ ๋ฐฐ์—ด์˜ ๋๊นŒ์ง€ ์ถ”์ถœ๋œ ๊ฐ’์ด ๋‹ด๊ฒผ๋‹ค. ๊ฒฐ๊ตญ newArray1 ๊ณผ ๋™์ผํ•˜๋‹ค๐Ÿ˜. ์—ฌ๊ธฐ์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€ ์›๋ณธ array ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

โ—ฝ ๊นŠ์€ ๋ณต์‚ฌํ•˜๊ธฐ

๊ทธ๋ฆฌ๊ณ  slice() ๋ฉ”์„œ๋“œ์˜ ๋˜๋‹ค๋ฅธ ํŠน์ง•์€ ๋ชจ๋“  ์ธ์ž๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ธ์ž๋ฅผ ์•„๋ฌด๊ฒƒ๋„ ์ „๋‹ฌํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ชจ๋“  ์›์†Œ๋ฅผ ์ถ”์ถœํ•œ ๋ฐฐ์—ด์ด ๋ฐ˜ํ™˜๋œ๋‹ค. ์ด ๋•Œ๋„ ์—ญ์‹œ ์™„์ „ํžˆ ์ƒˆ๋กœ์šด ์ฐธ์กฐ๊ฐ’์„ ๊ฐ–๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ๋ฐฐ์—ด์˜ ๊นŠ์€ ๋ณต์‚ฌ์˜ ํšจ๊ณผ๋ฅผ ๋ƒ…๋‹ˆ๋‹ค.

const array = [1, 2, 3, 4, 5];
const newArray = array.slice();

console.log(newArray); // [1, 2, 3, 4, 5]
console.log(array); // [1, 2, 3, 4, 5]

๋‹จ, ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ’์ด ๊ธฐ๋ณธํ˜•์ผ ๋•Œ๋งŒ ๊นŠ์€ ๋ณต์‚ฌ๊ฐ€ ๋œ๋‹ค. ๊ฐ’์ด ์ฐธ์กฐํ˜•์ธ ์›์†Œ๋Š” ์–•์€ ๋ณต์‚ฌ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.