[230821] Leetcode 1문제, JS 깊은 복사 얕은 복사, lodash
Leetcode 1문제
- 88. Merge Sorted Array
- 오랜만에 코테 문제 풀었다.
// 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 -> 여기 라이브러리에도 있는데 저런 느낌으로 구현
Leave a comment