Vue splice ํ•จ์ˆ˜ - Vue splice hamsu

๐Ÿ—“2018๋…„ 06์›” 28์ผ โˆ™ ๐Ÿ–ŠTutorialPost โˆ™ โณ5๋ถ„


๋ฐฐ์—ด(Array)์€ JavaScript ๊ฐ์ฒด์˜ ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ๋กœ์จ, ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ช…์ด 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ ์ˆœ์ฐจ์ ์œผ๋กœ ์ปค์ง€๋Š” ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ํ˜•ํƒœ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์กฐํšŒํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฐฐ์—ด์€ Array ํƒ€์ž… ๊ฐ์ฒด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ์†์‰ฝ๊ฒŒ ๋ฐฐ์—ด ์กฐ์ž‘์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ๊ธฐ์ดˆ

๋ฐฐ์—ด์€ ๊ฐ’์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ํ‘œ๊ธฐ ํ˜•์‹์€ ์•„๋ž˜์ฒ˜๋Ÿผ ๋Œ€๊ด„ํ˜ธ [] ๋ฅผ ์ด์šฉํ•ด ํ‘œ๊ธฐํ•˜๋ฉฐ ๋‚ด๋ถ€์—๋Š” ์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…๋„ ์ œ์•ฝ์—†์ด ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฒฐ๊ตญ์€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๋‚˜์—ดํ•˜๋Š” ์šฉ๋„๋กœ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์—ญ์‹œ๋‚˜ ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋Š” 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

// ๋ฐฐ์—ด ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ
arr[0];  // 1
arr[2];  // 3

// ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐœ์ˆ˜ ํ™•์ธํ•˜๊ธฐ
arr.length  // 3

// ๋งˆ์ง€๋ง‰ ์š”์†Œ์— ์ ‘๊ทผ
arr[arr.length - 1]; //=> 3

๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Œ€์ž… ์—ฐ์‚ฐ์ž๋ฅผ ์ด์šฉํ•ด ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ํ• ๋‹นํ•ด ์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

arr[2] = 4;
console.log(arr);  // [ 1, 2, 4 ]

๋ฐฐ์—ด์˜ ๋ฉ”์„œ๋“œ

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

Array ๋ฉ”์„œ๋“œ

Array.from()

์œ ์‚ฌ ๋ฐฐ์—ด ํ˜น์€ ๋ฐ˜๋ณต๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์ƒˆ Array ์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

Array.from(arrayLike[, mapFn[, thisArg]])

์ด ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ํ•จ์ˆ˜์˜ arguments๋ฅผ ๋ฐฐ์—ด๋กœ ์†์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function f() {
  var args = Array.from(arguments);
  console.log(args);
}

f(1, 2, 3);  // [ 1, 2, 3 ]

Array.isArray()

์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ์ฒด๊ฐ€ ๋ฐฐ์—ด์ด๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฆฌํ„ดํ•˜์—ฌ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋ฐฐ์—ด์ธ์ง€ ํ™•์ธ ํ•ฉ๋‹ˆ๋‹ค.

Array.isArray([1, 2, 3]);  // true
Array.isArray({foo: 123}); // false
Array.isArray('foobar');   // false

์›๋ณธ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ

์•„๋ž˜์˜ ๋ฉ”์„œ๋“œ๋“ค์€ ์›๋ณธ ๋ฐฐ์—ด์„ ๋ฐ”๋กœ ์ˆ˜์ •ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์— ์ฃผ์˜ํ•ด์•ผ ํ•˜๋ฉฐ, ์›๋ณธ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ์—†์ด ๋ฐฐ์—ด ์กฐ์ž‘์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ์—๋Š” ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ๋“ค์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฐฐ์—ด ์š”์†Œ ์ถ”๊ฐ€ ์ œ๊ฑฐ ๋ฉ”์„œ๋“œ

๋ฐฐ์—ด์˜ ์ฒ˜์Œ ํ˜น์€ ๋งˆ์ง€๋ง‰์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์ œ๊ฑฐํ•˜๋Š” ๋ฉ”์„œ๋“œ๋“ค ์ž…๋‹ˆ๋‹ค.

  • push ๋ฉ”์„œ๋“œ : ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„, ๋ณ€๊ฒฝ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜
  • pop ๋ฉ”์„œ๋“œ : ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„, ์ œ๊ฑฐํ•œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
  • unshift ๋ฉ”์„œ๋“œ : ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์ž๋ฆฌ์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„, ๋ณ€๊ฒฝ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๋ฐ˜ํ™˜
  • shift ๋ฉ”์„œ๋“œ : ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•œ ํ›„, ์ œ๊ฑฐํ•œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜

var arr = [1, 2, 3];

// ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ œ๊ฑฐ, ์ œ๊ฑฐ๋œ ์š”์†Œ ๋ฆฌํ„ด
arr.pop();  // 3

// ๋ฐฐ์—ด ๋งˆ์ง€๋ง‰์— ์š”์†Œ ์ถ”๊ฐ€, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ๋ฆฌํ„ด
arr.push("new");  // 3
console.log(arr);  //-> [ 1, 2, 'new' ]

// ๋ฐฐ์—ด์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ, ์ œ๊ฑฐ๋œ ์š”์†Œ ๋ฆฌํ„ด
arr.shift();  // 1

// ๋ฐฐ์—ด์˜ ์ฒ˜์Œ์— ์š”์†Œ ์ถ”๊ฐ€, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ ๋ฆฌํ„ด
arr.unshift("new");  // 3
console.log(arr);  //-> [ 'new', 2, 'new' ]

splice ๋ฉ”์„œ๋“œ - ๋ฐฐ์—ด ์š”์†Œ ์ถ”๊ฐ€ ์‚ญ์ œ

Array.prototype.splice() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด์˜ ํŠน์ • ์œ„์น˜์— ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌํ„ด๊ฐ’์€ ์‚ญ์ œํ•œ ๋ฐฐ์—ด ์š”์†Œ์ž…๋‹ˆ๋‹ค. ์‚ญ์ œํ•œ ์š”์†Œ๊ฐ€ ์—†๋”๋ผ๋„ ๋นˆ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

/* ๋ฐฐ์—ด ์ž„์˜์˜ ์œ„์น˜์— ์š”์†Œ ์ถ”๊ฐ€ ์ œ๊ฑฐ */
// start - ์ˆ˜์ •ํ•  ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค
// deleteCount - ์‚ญ์ œํ•  ์š”์†Œ ๊ฐœ์ˆ˜, ์ œ๊ฑฐํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 0
// el - ๋ฐฐ์—ด์— ์ถ”๊ฐ€๋  ์š”์†Œ
arr.splice(start, deleteCount, el);


var arr = [1, 5, 7];
arr.splice(1, 0, 2, 3, 4);  // [], arr: [1, 2, 3, 4, 5, 7]
arr.splice(1, 2);           // [2, 3], arr: [1, 4, 5, 7]

reverse ๋ฉ”์„œ๋“œ - ๋ฐฐ์—ด ์š”์†Œ ์ˆœ์„œ ๋ฐ˜์ „

Array.prototype.reverse() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด ์š”์†Œ์˜ ์ˆœ์„œ๋ฅผ ๋’ค์ง‘์Šต๋‹ˆ๋‹ค.

// ์š”์†Œ ์ˆœ์„œ๋ฅผ ๋ฐ˜์ „ ์‹œํ‚ด
var arr = [1, 3, 5, 7];
arr.reverse();  // [7, 5, 3, 1]

sort ๋ฉ”์„œ๋“œ - ๋ฐฐ์—ด ์š”์†Œ ์ •๋ ฌ

Array.prototype.sort() ๋ฉ”์„œ๋“œ๋Š” ๋ฐฐ์—ด ๋‚ด๋ถ€์˜ ์š”์†Œ๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

sort ํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐฐ์—ด์˜ ์š”์†Œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

var arr = [11, 1, 115, 42, 12];
arr.sort();    //-> [ 1, 11, 115, 12, 42 ]

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์œ„ ์˜ˆ์ œ์™€ ๊ฐ™์ด ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๋ฅผ ๋Œ๋ ค์ค„ ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ์ˆซ์ž๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ sort ํ•จ์ˆ˜์˜ ์ธ์ž๊ฐ’์œผ๋กœ ๋น„๊ต ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ •๋ ฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

var arr = [11, 1, 115, 42, 12];
arr.sort(function(a, b) { return a - b; });
//-> [ 1, 11, 12, 42, 115 ]

๋น„๊ตํ•จ์ˆ˜๋Š” ๋‘๊ฐœ์˜ ์ธ์ž (a, b) ๋ฅผ ๋ฐ›์œผ๋ฉฐ ๊ฐ๊ฐ ๋น„๊ตํ•  ์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋น„๊ตํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด ์š”์†Œ์˜ ๊ฐ€์žฅ ์ฒ˜์Œ ๋‘ ์š”์†Œ๋ถ€ํ„ฐ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•ด๊ฐ€๋ฉฐ ์ •๋ ฌ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋น„๊ตํ•จ์ˆ˜ function(a, b) {} ์˜ ๋ฐ˜ํ™˜๊ฐ’์— ๋”ฐ๋ผ ์ •๋ ฌ ๊ทœ์น™์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ณผ๊ฐ’์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด a๊ฐ€ ๋‚ฎ์€ ์ƒ‰์ธ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ’์ด 0์ด๋ฉด a์™€ b์˜ ์ˆœ์„œ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ’์ด 0๋ณด๋‹ค ํฌ๋ฉด b๊ฐ€ ๋‚ฎ์€ ์ƒ‰์ธ์œผ๋กœ ์ •๋ ฌ๋ฉ๋‹ˆ๋‹ค.

์œ„์˜ ์˜ˆ์—์„œ 11๊ณผ 1์„ ๋น„๊ตํ•  ๊ฒฝ์šฐ a - b ๋Š” 10์œผ๋กœ 0๋ณด๋‹ค ํฌ๋ฏ€๋กœ b ๊ฐ€ ์•ž์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋น„๊ตํ•จ์ˆ˜๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฐ์—ด์— ๋‚˜์—ด๋œ ๊ฐ์ฒด์˜ ๊ฐ’์œผ๋กœ ์ •๋ ฌํ•˜๋ ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var arr = [
  {name: "Dinah"},
  {name: "Jack"},
  {name: "Alice"},
  {name: "Ada"}
];

// name ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ์ •๋ ฌ
arr.sort(function(a, b) { return a.name > b.name });