[230821] Leetcode 1문제, JS 깊은 복사 얕은 복사, lodash

Leetcode 1문제

// O(m+n)
var merge = function (nums1, m, nums2, n) {
  let idx1 = m - 1;
  let idx2 = n - 1;

  for (let i = m + n - 1; i >= 0; i--) {
    if (idx1 < 0 || nums1[idx1] <= nums2[idx2]) {
      nums1[i] = nums2[idx2];
      idx2 -= 1;
    } else {
      nums1[i] = nums1[idx1];
      idx1 -= 1;
    }
  }
};
// 처음에는 이렇게 풀었다. O(n + mlogn)
var merge = function (nums1, m, nums2, n) {
  for (let i = m; i < m + n; i++) {
    nums1[i] = nums2[i - m];
  }

  nums1.sort((a, b) => {
    if (a > b) return 1;
    if (a === b) return 0;
    if (a < b) return -1;
  });
};

JS 깊은 복사, 얕은 복사

function modifyArray(arr) {
  arr[0] = 99; // 원본 배열의 첫 번째 요소를 수정
}

const originalArray = [1, 2, 3];
modifyArray(originalArray);
console.log(originalArray); // [99, 2, 3] 원본 배열이 수정됨

function createModifiedArray(arr) {
  const newArray = [...arr]; // 새로운 배열 생성 (깊은 복사)
  newArray[0] = 100; // 새로운 배열의 첫 번째 요소를 수정
  return newArray;
}

const originalArray = [1, 2, 3];
const modifiedArray = createModifiedArray(originalArray);
console.log(originalArray); // [1, 2, 3] 원본 배열은 그대로 유지
console.log(modifiedArray); // [100, 2, 3] 새로운 배열은 수정됨
  • ... : 확산 연산자, spread operator
  • symbol.iterator 안에 next () 사용해서 펼쳐짐

lodash 중복 클릭 방지

    1 	const debounce = function(fn, t) {
    2 	  let timeout;
    3 	  return function(...args) {
    4 	    clearTimeout(timeout);
    5 	    timeout = setTimeout(() => {
    6 	      fn.apply(this, args);
    7 	    }, t);
    8 	  };
    9 	};
  • 검색 기능할때 유용
    • 왜? clearTimeout 실행될때마다 지금 실행하고 있는 함수가 없어지고 새로운 함수 실행
  • lodash -> 여기 라이브러리에도 있는데 저런 느낌으로 구현

Categories:

Updated:

Leave a comment