JavaScript에서 현재 타임스탬프 얻기 JavaScript 개발을 하다 보면 현재 시간을 타임스탬프 형태로 확인해야 하는 경우가 자주 있습니다. 타임스탬프는 크게 두 가지 단위로 표현할 수 있습니다. 초(seconds) 단위의 Unix 타임스탬프 밀리초(milliseconds) 단위의 에포크(Epoch) 이후 경과 시간 대부분의 프로그래밍 언어는 에포크(1970년 1월 1일 00:00:00 UTC) 이후 흐른 초를 기준으로 시간을 다루지만, JavaScript는 밀리초를 기준으로 동작한다는 점이 특징입니다. 따라서 용도에
숫자로 이루어진 배열이 있고, 여기에 여러 요소가 추가되어 있다고 가정해 봅시다. 이때 배열에서 특정 요소를 손쉽게 제거할 수 있는 방법이 필요합니다.우리가 원하는 동작은 다음과 같습니다.array.remove(number);프레임워크나 외부 라이브러리는 사용할 수 없으며, 오직 코어 자바스크립트(Core JavaScript)만으로 구현해야 합니다.구현 아이디어핵심은 Array.prototype.splice() 메서드입니다. splice()는 지정한 인덱스부터 원하는 개수만큼 요소를 삭제할 수 있어, 특정 값과 일치하는 모든 요소를
JavaScript 개발을 하다 보면 서로 다른 두 객체의 속성을 하나로 합쳐 새로운 객체를 만들어야 하는 경우가 자주 있습니다. 이번 글에서는 두 객체를 병합하면서도 원본 객체는 그대로 유지하는 방법을 알아보겠습니다.문제 상황다음과 같이 두 개의 객체가 정의되어 있다고 가정해 보겠습니다.const a = { a: 1, af: function() { console.log(this.a) }, }; const b = { b: 2, bf: function() { console.log(this.b) }, };여
JavaScript로 개발하다 보면 서로 형태가 다른 두 객체를 하나의 객체로 병합해야 하는 경우가 종종 있습니다. 이번 글에서는 값의 타입이 서로 다른 두 객체를 합쳐, 각 키의 값들을 하나의 배열로 모으는 Union 함수를 구현하는 방법을 알아보겠습니다. 문제 정의 먼저, 값이 문자열인 첫 번째 객체가 있다고 가정해 보겠습니다. const obj1 = { name: , email: }; 그리고 두 번째 객체는 동일한 키를 가지고 있지만, 값이 배열 형태입니다. const obj2 = { name: [x], email: [
JavaScript에서 데이터를 다루다 보면 서로 다른 형태의 배열을 하나로 합쳐야 하는 경우가 자주 발생합니다. 이번 글에서는 월(month) 배열과 현금 흐름(cashflow) 객체 배열을 결합하여, 모든 월에 대한 데이터를 빠짐없이 포함하는 새로운 배열을 만드는 방법을 알아보겠습니다.문제 상황예를 들어, 다음과 같이 현금 흐름을 나타내는 두 개의 배열이 있다고 가정해 보겠습니다.const months = [jan, feb, mar, apr];const cashflows = [ {mont
문제 개요이 글에서 다룰 문제는 y1(시작점)과 y2(끝점) 좌표로 정의되는 여러 개의 세로 구간(vertical regions)이 주어졌을 때, 일정 길이 이상으로 겹치는 구간들을 모두 찾아내는 것입니다.좌표계의 원점은 화면의 왼쪽 상단에 위치하므로, y2 값은 항상 y1보다 큽니다.예를 들어 다음과 같은 구간 배열이 있다고 가정해 보겠습니다.const regions = [ [10, 100], [50, 120], [60, 180], [14
숫자(Number) 배열을 인수로 받는 JavaScript 함수를 작성해야 합니다.이 함수는 해당 배열을 제자리(in-place)에서 정렬해야 하며, 오름차순 또는 내림차순 중 원하는 방식으로 정렬할 수 있습니다.기본 sort()만으로는 부족한 이유JavaScript의 sort() 메서드는 별도의 비교 함수를 전달하지 않으면 모든 요소를 문자열로 변환한 뒤 사전식(lexicographic) 순서로 정렬합니다. 그래서 [1, 5, 10, 25, 40]을 기본 sort()로 정렬하면 [1, 10, 25, 40, 5]처럼 엉뚱한 결과가
JavaScript로 개발하다 보면 깊게 중첩된 객체 안에 특정 키가 실제로 존재하는지 확인해야 하는 경우가 자주 있습니다. 단순히 obj.a.b.c처럼 접근하면 중간 경로에 값이 없을 때 TypeError가 발생할 수 있기 때문에, 안전하게 존재 여부를 검사하는 함수를 만들어 두면 매우 유용합니다.문제 상황예를 들어 다음과 같이 빈 객체에 대한 참조가 있다고 가정해 보겠습니다.let test = {};이 객체는 나중에 다음과 같이 여러 단계로 중첩된 객체를 가질 수 있습니다.test = { level1: { level2: { le
문제 소개리터럴 값(숫자, 문자열 등)으로 구성된 배열을 인수로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 입력 배열에 포함된 각 요소가 몇 번 등장했는지 빈도를 계산한 뒤, 그 결과를 바탕으로 새로운 배열을 생성해 반환해야 합니다.예를 들어, 입력 배열이 다음과 같다고 가정해 보겠습니다.const arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4];그렇다면 기대되는 출력 결과는 다음과 같습니다.const output = [ [5, 3],
JavaScript를 다루다 보면 중첩된 배열 구조의 데이터를 객체 형태로 변환해야 하는 경우가 자주 발생합니다. 이 글에서는 배열 안에 배열이 포함된 복잡한 구조를 깔끔한 객체 배열로 바꾸는 방법을 알아보겠습니다.문제 상황다음과 같이 배열 안에 배열이 중첩된 데이터가 있다고 가정해 보겠습니다.const arr = [ [ [dog, Harry], [age, 2] ], [ [dog, Roger], [age, 5] ] ];각 내부 배열은 [키, 값] 쌍으로 이루어져 있습니다. 우
JavaScript로 복잡한 JSON 파일을 다루다 보면, 데이터를 계층 구조로 만들어 트리(tree) 형태로 구성해야 하는 경우가 자주 있습니다. 예를 들어 카테고리 메뉴, 조직도, 폴더 구조 등을 렌더링할 때 평면(flat) 배열을 트리 배열로 변환하는 작업이 필요합니다.문제 상황 이해하기JSON 배열의 각 항목은 다음과 같은 속성을 가지고 있습니다.id — 각 노드를 식별하는 고유한 값parentId — 부모 노드의 id (루트 노드일 경우 0)level — 트리 내에서의 깊이(단계)입력 데이터는 이미 정렬되어 있다고 가정합니
문제 개요실무에서는 하나의 배열 안에 일대다(1:N) 관계로 얽힌 데이터를 다루는 경우가 많습니다. 예를 들어 조직도처럼 데이터가 레벨(level)을 기준으로 계층화되어 있고, 각 요소의 부모는 항상 자신보다 한 단계 위 레벨에 위치하며 parentId 속성으로 참조되는 구조입니다.이렇게 평면(flat)하게 나열된 배열에서 다단계 트리 구조의 배열을 추출해야 한다면 어떻게 해야 할까요? 목표는 가장 높은 레벨의 요소들이 메인 배열을 구성하고, 그 자식 요소들은 각 부모의 children 서브 배열에 배치되는 형태를 만드는 것입니다.
JavaScript로 개발하다 보면 복잡하게 중첩된 키(key)-값(value) 쌍 형태의 JSON 배열을 만나게 됩니다. 이런 구조는 데이터를 다루기 번거롭기 때문에, 일반적인 JSON 객체 형태로 변환하는 것이 좋습니다.문제 상황예를 들어, 다음과 같이 key와 value 프로퍼티로 구성된 객체들을 담고 있는 JSON 배열이 있다고 가정해 보겠습니다.const arr = [{ key: name, value: john }, { key: number, value: 1234 }, { key: pri
문제 소개JavaScript로 데이터를 다루다 보면 객체 배열을 특정 기준으로 그룹화해야 하는 경우가 자주 발생합니다. 이번 글에서는 region(지역) 속성을 기준으로 객체 배열을 그룹화하고, 동시에 각 지역별 고유 사용자 수를 집계하는 방법을 알아보겠습니다.먼저 다음과 같은 객체 배열이 있다고 가정해 보겠습니다.const arr = [ { region: Africa, fruit: Orange, user: Gary }, { region: Africa, fruit: Apple, user: Steve }, { r
숫자로 이루어진 배열을 입력받아 처리하는 JavaScript 함수를 작성해야 한다고 가정해 보겠습니다. 배열 안에는 같은 값이 여러 번 반복해서 들어 있을 수 있습니다. 이때 함수는 중복된 요소들을 각각 한데 묶어 합산하고, 그 결과로 만들어진 새로운 배열을 반환해야 합니다. 예제 코드 작성할 코드는 다음과 같습니다. const arr = [20, 20, 20, 10, 10, 5, 1]; const sumIdentical = (arr = []) => { let map = {}; for (let i = 0; i &
이번 글에서는 문자열 배열을 입력받아 그중 가장 긴 문자열을 찾아 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.이 함수가 충족해야 할 요구 사항은 다음과 같습니다.문자열 배열을 인자로 받습니다.배열을 순회하면서 가장 긴 문자열을 찾습니다.원본 배열의 내용은 변경하지 않은 상태로 결과를 반환합니다.예제 코드= val.length ? acc : val; }); return res; }; console.log(findLargest(
문제 소개JavaScript에서 하나의 숫자를 여러 개의 난수로 나눠야 하는 경우가 종종 있습니다. 예를 들어 총 포인트를 사용자들에게 무작위로 분배하거나, 게임에서 아이템 수량을 나누는 상황 등이 대표적입니다.이번 글에서는 다음 조건을 만족하는 JavaScript 함수를 작성해 보겠습니다.첫 번째 인자로 전체 합계가 될 숫자를 받습니다.두 번째 인자로 각 숫자가 넘지 말아야 할 최댓값을 받습니다.생성된 네 개의 난수를 모두 더하면 첫 번째 인자와 같아야 합니다.네 개의 숫자 중 어느 하나도 두 번째 인자(최댓값)를 초과해서는 안
JavaScript에서는 임의 개수의 배열을 입력받아 각 배열의 요소들로 이루어진 데카르트 곱(Cartesian Product)을 계산하고, 각 요소를 대시(-)로 연결한 문자열 배열을 반환하는 함수를 작성할 수 있습니다.예를 들어 세 개의 배열이 주어졌을 때, 첫 번째 배열의 요소 × 두 번째 배열의 요소 × 세 번째 배열의 요소로 만들 수 있는 모든 조합을 하나의 문자열로 합쳐서 결과 배열에 담아 반환하는 것이 목표입니다.구현 코드아래 코드는 reduce()와 map()을 활용해 가변 개수의 배열에 대해 데카르트 곱을 계산합니다
문제 이해하기요소들을 담고 있는 배열을 입력으로 받는 JavaScript 함수를 작성해야 합니다. 이 함수의 역할은 배열 안에 정수, 즉 number 타입의 값이 하나라도 포함되어 있는지 검사하는 것입니다.정수 값이 존재하면 true를, 존재하지 않으면 false를 반환하면 됩니다.구현 접근 방식핵심은 Array.prototype.find() 메서드를 활용하는 것입니다. find()는 전달된 콜백 함수의 조건을 만족하는 첫 번째 요소를 반환하며, 조건을 만족하는 요소가 없으면 undefined를 반환합니다.여기서는 각 요소의 타입이
배열 안에 배열이 중첩된 형태의 데이터를 다루다 보면, 이를 사람이 읽기 쉬운 객체(object) 형태로 바꿔야 하는 경우가 자주 있습니다. 이번 글에서는 키-값 쌍으로 이루어진 중첩 배열을 객체 배열로 변환하는 방법을 알아보겠습니다. 문제 상황 다음과 같이 배열 안에 배열이 중첩된 데이터가 있다고 가정해 보겠습니다. const arr = [ [ [firstName, Joe], [lastName, Blow], [age, 42], [role, clerk], [