[JavaScript] λ°°μ—΄(Array)

λ””λ”©Β·2022λ…„ 11μ›” 3일
0

Today I Learned

λͺ©λ‘ 보기
4/12
post-thumbnail

πŸ“ 2022. 11. 03

JavaScript / λ°°μ—΄



πŸ“Œ Today I Learned

  • λ°°μ—΄ μ½”ν”Œλ¦Ώ

πŸ’¬ null

typeof μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μžμ˜ 데이터 νƒ€μž…μ„ μ—°μ‚°μžλ‘œ λ°˜ν™˜ν•œλ‹€.
typeof μ—°μ‚°μžλŠ” 7가지 λ¬Έμžμ—΄ string, number, boolean, undefined, symbol, object, function 쀑 ν•˜λ‚˜λ₯Ό λ°˜ν™˜ν•œλ‹€.

console.log(typeof null)

μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰μ‹œν‚€λ©΄ null이 μ•„λ‹ˆλΌ objectκ°€ 좜λ ₯λœλ‹€.

μ΄λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ μ—μ§„μ˜ 버그닀. μˆ˜μ •μ„ ν–ˆμ–΄μ•Ό ν•˜μ§€λ§Œ 개발이 μ™„λ£Œλœ 타 μ‚¬μ΄νŠΈλ‚˜ μ½”λ“œλ“€μ— 영ν–₯을 쀄 수 μžˆμ–΄ μˆ˜μ •λ˜μ§€ μ•Šκ³  μžˆλ‹€.

null을 확인할 λ•ŒλŠ” typeofκ°€ μ•„λ‹Œ 일치 μ—°μ‚°μž(===)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

let result = null;

console.log(typeof null === null); 
// false

console.log(result === null);
// true



πŸ’¬ for...of

for...of λͺ…령문은 λ°˜λ³΅κ°€λŠ₯ν•œ 객체(Array, Map (en-US), Set, String, TypedArray, arguments 객체 등을 포함)에 λŒ€ν•΄μ„œ λ°˜λ³΅ν•˜κ³  각 κ°œλ³„ 속성값에 λŒ€ν•΄ μ‹€ν–‰λ˜λŠ” 문이 μžˆλŠ” μ‚¬μš©μž μ •μ˜ 반볡 후크λ₯Ό ν˜ΈμΆœν•˜λŠ” 루프λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.

function getEvenNumbers(arr) {
  let result = [];
  for (i = 0; i < arr.length; i++) {
    if (arr[i] % 2 === 0) {
      result.push(arr[i])
    } 
  }
  return result;
}

------------------------------------
// μ•„λž˜μ²˜λŸΌ ν™œμš©ν•  수 μžˆλ‹€.

function getEvenNumbers(arr) {
  let result = [];
  for (let el of arr) {
    if (el % 2 === 0) {
      result.push(el);
    }
  }

  return result;
}



πŸ’¬ λ°°μ—΄ ν•©μΉ˜κΈ°(mergeArrays)

πŸ“‚ concat()

concat() ν•¨μˆ˜λŠ” λ©”μ„œλ“œλŠ” 인자둜 주어진 λ°°μ—΄μ΄λ‚˜ 값듀을 κΈ°μ‘΄ 배열에 ν•©μ³μ„œ μƒˆ 배열을 λ°˜ν™˜ν•œλ‹€.

  • κΈ°μ‘΄ 배열을 λ³€κ²½ν•˜μ§€ μ•Šκ³  μΆ”κ°€λœ μƒˆλ‘œμš΄ 배열을 λ°˜ν™˜ν•œλ‹€.
const arr1 = ['apple', 'banana', 'carrot'];
const arr2 = ['a', 'b', 'c'];
const arr3 = arr1.concat(arr2);

console.log(arr3);
// ['apple', 'banana', 'carrot', 'a', 'b', 'c']

μ—¬κΈ°μ„œ arr3에 객체 값을 concat으둜 ν•©μΉ˜λ €κ³  ν•˜λ©΄ μ–΄λ–»κ²Œ λ˜λŠ”μ§€ μ•Œμ•„λ³΄μž.

let user = {
	name: 'kim',
	age: 20,
};

const newarr = arr3.concat(user);

console.log(newarr);
// ['apple', 'banana', 'carrot', 'a', 'b', 'c', {...}]


< 였브젝트둜 λ‚˜μ˜€λŠ” 것을 확인할 수 μžˆλ‹€. >


객체가 더해진 newarr에 배열을 가진 배열을 ν•©μΉ˜λ©΄ μ–΄λ–»κ²Œ 될까?

const text = [['celan', 'soap'], ['cute', 'cat']];

const newarr2 = newarr.concat(text)

newarr.concat(text)
// ['apple', 'banana', 'carrot', 'a', 'b', 'c', {…}, Array(2), Array(2)]


πŸ“‚ ...spread operator

ES6μ—μ„œ μ œκ³΅ν•˜λŠ” spread operator(...)λ₯Ό μ‚¬μš©ν•˜μ—¬ 배열을 이어 뢙일 수 μžˆλ‹€.
μ „κ°œ μ—°μ‚°μžλΌκ³ λ„ ν•˜λ©° λ°°μ—΄κ³Ό 객체 λ“± μ—¬λŸ¬ κ³³μ—μ„œ μ‚¬μš©ν•  수 μžˆλ‹€.

λ°°μ—΄μ—μ„œ spread operatorλŠ” λ°°μ—΄μ˜ μ›μ†Œλ“€μ„ λΆ„ν•΄ν•΄μ„œ κ°œλ³„ μš”μ†Œλ‘œ λ§Œλ“€μ–΄ μ€€λ‹€.

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
const arr3 = [7, 8, 9];

const addArr = [...arr1, ...arr2, ...arr3];

console.log(addArr.length);
// 9
console.log(addArr);
// [1, 2, 3, 4, 5, 6, 7, 8, 9]

(spread operator)...은 arr1의 μ›μ†Œλ“€μ„ μͺΌκ°œμ–΄ κ°œλ³„μš”μ†ŒμΈ 1, 2, 3을 리턴.
...arr2λŠ” κ°œλ³„μš”μ†ŒμΈ 4, 5, 6을 리턴.
...arr3은 κ°œλ³„μš”μ†ŒμΈ 7, 8, 9λ₯Ό 리턴.

addArrλŠ” μ΄λ ‡κ²Œ μͺΌκ°œμ§„ κ°œλ³„ μš”μ†Œλ“€μ„ 인자둜 κ°€μ§€λŠ” μƒˆλ‘œμš΄ 배열이닀.


배열을 가진 배열듀을 ν•©μΉ˜λ©΄ μ•„λž˜μ²˜λŸΌ λ‚˜μ˜¨λ‹€.
const a = [['red', 'blue'], ['pink', 'green']]
const b = [['A', 'B'], ['C', 'D']]

const c = [...a, ...b]

console.log(c.length);
// 4

console.log(c)
// [Array(2), Array(2), Array(2), Array(2)]

πŸ“‚ Push & Spread Operator

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

arr1.push(arr2);

document.write(arr1.length + '<br>'); // 4
document.write(arr1[0] + '<br>'); // 1 
document.write(arr1[1] + '<br>'); // 2
document.write(arr1[2] + '<br>'); // 3
document.write(arr1[3] + '<br>'); // [4, 5, 6]

push() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 배열을 ν•©μΉ˜λ©΄ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ 배열을 ν•˜λ‚˜μ˜ μ›μ†Œλ‘œ μ²˜λ¦¬ν•œλ‹€.
μœ„ μ˜ˆμ œμ—μ„œ νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ 배열은 arr1의 4번째 μ›μ†Œκ°€ λœλ‹€.
λ”°λΌμ„œ, arr1의 κΈΈμ΄λŠ” 6이 μ•„λ‹ˆλΌ 4κ°€ λœλ‹€.

push() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—¬λŸ¬ 개의 배열을 ν•©μΉ  λ•Œ,
concat() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•œ 것과 같이 νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λœ λ°°μ—΄μ˜ μ›μ†Œ 각각을
μƒˆλ‘œμš΄ 배열에 λ„£μ–΄μ„œ ν•©μΉ˜κΈ° μœ„ν•΄μ„œλŠ” spread operator(...)λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];

arr1.push(...arr2);

document.write(arr1.length + '<br>'); // 6
document.write(arr1[0] + '<br>'); // 1 
document.write(arr1[1] + '<br>'); // 2
document.write(arr1[2] + '<br>'); // 3
document.write(arr1[3] + '<br>'); // 4
document.write(arr1[4] + '<br>'); // 5
document.write(arr1[5] + '<br>'); // 6
arr1.push(...arr2)

spread operator(...)은 λ°°μ—΄μ˜ μ›μ†Œλ“€μ„ μͺΌκ°œμ–΄ 각각의 κ°œλ³„μš”μ†Œλ₯Ό λ°˜ν™˜ν•œλ‹€.
νŒŒλΌλ―Έν„°λ‘œ μ „λ‹¬λ˜λŠ” arr2에 spread operatorλ₯Ό μ‚¬μš©ν•˜μ—¬ arr2의 μ›μ†Œλ“€μ„ 각각 μͺΌκ°œμ—ˆλ‹€.
spread operatorλ₯Ό μ‚¬μš©ν•¨μœΌλ‘œμ¨, 이 ν‘œν˜„μ‹μ€ arr1.push(4, 5, 6)κ³Ό 같은 효과λ₯Ό 가진닀.



πŸ’¬ slice

πŸ“‚ Array.slice()

slice() λ©”μ†Œλ“œλŠ” μ–΄λ–€ λ°°μ—΄μ˜ beginλΆ€ν„° endκΉŒμ§€(end 미포함)에 λŒ€ν•œ 얕은 볡사본을 μƒˆλ‘œμš΄ λ°°μ—΄ 객체둜 λ°˜ν™˜ν•©λ‹ˆλ‹€. 원본 배열은 λ°”λ€Œμ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

// ꡬ문 μž‘μ„±λ²•
arr.slice([begin[, end]])
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2)); // 2번째 λ‹€μŒλΆ€ν„° 좜λ ₯
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4)); // 2번째 λ‹€μŒλΆ€ν„° 4λ²ˆμ§ΈκΉŒμ§€ 좜λ ₯
// expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5)); // 1번째 λ‹€μŒλΆ€ν„° 5λ²ˆμ§ΈκΉŒμ§€ 좜λ ₯
// expected output: Array ["bison", "camel", "duck", "elephant"]

console.log(animals.slice(-2)); // -2λ²ˆμ§ΈκΉŒμ§€ 좜λ ₯
// expected output: Array ["duck", "elephant"]

console.log(animals.slice(2, -1)); // 2번째 λ‹€μŒ 좜λ ₯, -1번째 λ‹€μŒ 좜λ ₯
// expected output: Array ["camel", "duck"]

console.log(animals.slice()); // 각각의 λ¬Έμžμ—΄λ‘œ 좜λ ₯
// expected output: Array ["ant", "bison", "camel", "duck", "elephant"]

πŸ“‚ String.slice()

slice() λ©”μ†Œλ“œλŠ” λ¬Έμžμ—΄μ˜ 일뢀λ₯Ό μΆ”μΆœν•˜λ©΄μ„œ μƒˆλ‘œμš΄ λ¬Έμžμ—΄μ„ λ°˜ν™˜ν•©λ‹ˆλ‹€.

// ꡬ문 μž‘μ„±λ²•
str.slice(beginIndex[, endIndex])
const str = 'The quick brown fox jumps over the lazy dog.';

console.log(str.slice(31)); // 31번 λ‹€μŒλΆ€ν„° 좜λ ₯
// expected output: "the lazy dog."

console.log(str.slice(4, 19)); // 4번 λ‹€μŒλΆ€ν„° 19λ²ˆκΉŒμ§€
// expected output: "quick brown fox"

console.log(str.slice(-4)); // -4λ²ˆκΉŒμ§€ 좜λ ₯
// expected output: "dog."

console.log(str.slice(-9, -5)); -9번 λ‹€μŒλΆ€ν„° 5번 λ‹€μŒκΉŒμ§€ 
// expected output: "lazy"
profile
λ¬΄μ‚¬μ™€μš”... μ—΄κ³΅ν–μš”...

0개의 λŒ“κΈ€