글

라벨이 javascript인 게시물 표시

js 리스트 부분으로 가져오기 slice splice

 JavaScript에는 `sublist`라는 메서드는 없지만, 비슷한 기능을 하는 메서드인 **`slice`**와 **`splice`**가 있습니다. 이 두 메서드는 배열의 일부를 추출하거나 수정하는 데 유용하며, 사용 방식에 따라 원하는 부분 배열(서브리스트)을 얻을 수 있어요. ### 1. `slice` - `slice`는 배열의 일부를 추출하여 새로운 배열을 반환합니다. - 원본 배열에는 영향을 주지 않습니다. ```javascript const list = [1, 2, 3, 4, 5]; const sublist = list.slice(1, 4); // 인덱스 1부터 3까지 추출 (4는 포함되지 않음) console.log(sublist); // [2, 3, 4] console.log(list);    // [1, 2, 3, 4, 5] (원본 배열 유지) ``` ### 2. `splice` - `splice`는 배열의 특정 부분을 제거하거나 새로운 요소를 추가해 원본 배열을 수정합니다. - 일부 요소를 제거하여 서브리스트처럼 사용할 수 있습니다. ```javascript const list = [1, 2, 3, 4, 5]; const sublist = list.splice(1, 3); // 인덱스 1부터 3개의 요소를 제거하고 반환 console.log(sublist); // [2, 3, 4] console.log(list);    // [1, 5] (원본 배열이 수정됨) ``` 이 두 메서드의 차이점은 **`slice`는 원본 배열을 수정하지 않고, `splice`는 원본 배열을 수정**한다는 점이에요. `slice`는 서브리스트를 생성하기에 적합하고, `splice`는 배열에서 특정 요소를 제거하거나 추가할 때 유용합니다. # 이름 뜻 JavaScript의 `slice`와 `splice` 함수 이름은 각각의 기능을 잘 반영하는 단어로, 배열의 일부를 "잘라내는" 방식과 관련이 있습니다. ### 1. `sli...

javascript 에서 string 끝 공백 지우기

 JavaScript에는 Python의 `rstrip()`과 동일한 내장 함수는 없지만, 이를 대체할 수 있는 방법은 있습니다. JavaScript에서 문자열의 양 끝 공백을 제거하는 **`trim()`** 함수가 있고, 특정 문자열을 제거하는 작업은 **정규식**을 사용하여 쉽게 처리할 수 있습니다. `rstrip()`은 문자열의 오른쪽(뒤쪽)에 있는 공백이나 특정 문자를 제거하는 함수입니다. JavaScript에서는 이를 직접 구현하거나 정규식을 사용하여 처리할 수 있습니다. ### JavaScript에서 `rstrip()` 구현하기 1. **공백을 제거하는 방법**:    - JavaScript의 `trimEnd()` 또는 `trimRight()`를 사용하여 문자열 오른쪽 끝의 공백을 제거할 수 있습니다.    ```javascript    let str = "Hello, World!   ";    console.log(str.trimEnd());  // "Hello, World!"    ``` 2. **특정 문자를 제거하는 방법**:    - 정규식을 사용하여 특정 문자(예: 개행 문자 `\n`, 특정 기호)를 제거할 수 있습니다.    ```javascript    let str = "Hello, World!\n\n";    str = str.replace(/\n+$/, '');  // 오른쪽 끝의 개행 문자 제거    console.log(str);  // "Hello, World!"    ``` ### `rstrip()`과 같은 기능을 하는 JavaScript 코드 예시 #### 공백 제거: ```javascript let str = "Hello, World!   "; str = str...

WebAssembly란

Figma가 웹어셈블리를 사용  https://www.figma.com/ko-kr/blog/webassembly-cut-figmas-load-time-by-3x/ --- WebAssembly(웹어셈블리, 약칭 WASM)는 브라우저에서 실행할 수 있는 고성능 바이너리 형식의 코드입니다. 이를 통해 웹 애플리케이션이 기존 JavaScript보다 더 빠르고 효율적으로 실행될 수 있습니다. WebAssembly의 주요 특징은 다음과 같습니다: 1. **빠른 성능**: 컴파일된 바이너리 형식으로 제공되어 실행 속도가 매우 빠릅니다. C, C++, Rust 같은 언어로 작성된 코드를 WebAssembly로 컴파일하여 웹에서 실행할 수 있습니다. 2. **플랫폼 독립성**: 다양한 운영체제 및 브라우저에서 실행될 수 있습니다. 모든 주요 브라우저(Chrome, Firefox, Edge, Safari)에서 지원되며, 이를 통해 웹 애플리케이션이 더 많은 사용자에게 제공될 수 있습니다. 3. **JavaScript와의 상호작용**: WebAssembly는 JavaScript와 상호작용할 수 있어서, 기존 JavaScript 코드와 함께 사용할 수 있습니다. 필요에 따라 성능이 중요한 부분만 WebAssembly로 구현하고 나머지는 JavaScript로 처리할 수 있습니다. 4. **보안성**: 브라우저의 샌드박스 환경에서 실행되기 때문에 보안 측면에서도 안전하게 사용할 수 있습니다. 주로 게임, 비디오 편집기, 데이터 처리 및 머신러닝 같은 고성능이 요구되는 웹 애플리케이션에서 활용되며, 일반적으로 JavaScript의 성능을 개선하기 위한 용도로 많이 사용됩니다. ### WebAssembly의 장점 1. **고성능**:     - WebAssembly는 컴파일된 바이너리 형식으로 실행되므로, JavaScript보다 훨씬 빠르게 작동합니다. 특히 성능이 중요한 애플리케이션(게임, 머신러닝, 비디오 처리 등)에 유리합니다. 2. **플랫폼 독립...

python javascript 입출력 (알고리즘 문제용)

 https://help.acmicpc.net/language/info # 파이썬 알고리즘 문제 빠른 입출력 ```python import sys #한줄씩 n=sys.stdin.readline().rstrip() N,S=map(int,sys.stdin.readline().rstrip().split()) # 여러줄 한번에 input_str = sys.stdin.read().rstrip().split( "\n" )  ``` --- # js 백준 ```javascript var fs = require('fs'); var input = fs.readFileSync('/dev/stdin').toString().split(' '); var a = parseInt(input[0]); var b = parseInt(input[1]); console.log(a+b); ``` eof 예시 10951 ```javascript var fs = require('fs'); var input = fs.readFileSync('/dev/stdin').toString().trimEnd().split('\n'); #전체 입력으로 해결하는데 trimEnd로 끝에 공백제거 for (let i=0;i<input.length;i++){     let [a,b]=input[i].split(" ")     console.log(Number(a)+Number(b)) } ``` --- JavaScript로 코딩 테스트를 할 때는 입출력 방식이 플랫폼마다 다를 수 있습니다. 그러나 일반적으로 사용하는 두 가지 환경에 맞춰 설명하겠습니다. 1. **Node.js 환경**:    - 대부분의 코딩 테스트 플랫폼에서 JavaScript를 실행할 때는 Node.js 환경을 사용합니다. Node.js에서 표준 입력/출력을 처리하는 방법을 알아봅니다. 2. **브라우저 환경**:    - 브라...

jupyter notebook 에서 Js -> IJavascript, c++ -> xeus-cling

jupyter notebook 으로 js 파일 만들기. npm install -g ijavascript ijsinstall `IJavascript`는 Jupyter Notebook에서 JavaScript와 Node.js 코드를 실행할 수 있도록 해주는 Jupyter 커널입니다. 이를 사용하면 Jupyter Notebook에서 JavaScript를 손쉽게 실행하고 테스트할 수 있습니다. ### IJavascript 설치 방법 1. **Node.js 설치**: 먼저, Node.js와 npm이 설치되어 있어야 합니다. Node.js는 JavaScript 런타임 환경이고, npm은 Node.js의 패키지 관리 도구입니다. Node.js와 npm이 설치되어 있지 않다면, [Node.js 공식 웹사이트](https://nodejs.org/)에서 설치할 수 있습니다. 2. **IJavascript 설치**:    터미널이나 명령 프롬프트에서 다음 명령어를 실행하여 IJavascript를 설치합니다.    ```bash    npm install -g ijavascript    ijsinstall    ```    `ijsinstall` 명령어는 Jupyter에 IJavascript 커널을 등록합니다. ### IJavascript 사용 방법 1. Jupyter Notebook을 시작합니다. `jupyter notebook` 명령어를 사용하여 Jupyter Notebook 인터페이스를 열 수 있습니다. 2. 새 노트를 만들 때, 언어 선택 옵션에서 `JavaScript (Node.js)` 또는 `IJavascript`를 선택합니다. 3. 이제 셀에서 JavaScript 코드를 실행할 수 있습니다. 예를 들어:    ```javascript    console.log("Hello, world!");    ``` ...

javascript cheatsheet

JavaScript 기능들을 정리한 치트시트를 제공합니다. 이 치트시트는 데이터 구조와 알고리즘을 구현하는 데 필요한 기본적인 구문과 기능을 포함하고 있습니다. ## JavaScript Coding Cheat Sheet ### 1. **기본 문법** #### 변수 선언 ```javascript let variable = value;   // 변수 선언 (변경 가능) const constant = value; // 상수 선언 (변경 불가) ``` #### 함수 선언 ```javascript // 함수 선언식 function functionName(params) {   // 함수 내용 } // 함수 표현식 const functionName = function(params) {   // 함수 내용 }; // 화살표 함수 const functionName = (params) => {   // 함수 내용 }; ``` ### 2. **기본 데이터 구조** #### 배열 (Array) ```javascript let arr = [1, 2, 3]; // 배열 길이 console.log(arr.length); // 배열 요소 접근 console.log(arr[0]); // 배열의 끝에 추가 arr.push(4); // 배열의 끝에서 제거 arr.pop(); // 배열의 앞에 추가 arr.unshift(0); // 배열의 앞에서 제거 arr.shift(); ``` #### 객체 (Object) ```javascript let obj = {   key1: 'value1',   key2: 'value2' }; // 속성 접근 console.log(obj.key1); // 속성 추가 또는 변경 obj.key3 = 'value3'; // 속성 제거 delete obj.key2; ``` ### 3. **반복문 및 조건문** #### 반복문 ```javascript // for 반복문 for (let i = 0; i ...

javascript join으로 배열을 스트링으로 합치기(python의 join과 비슷)

 리스트의 `join` 메서드는 배열의 모든 요소를 문자열로 변환한 다음 지정된 구분자를 사용하여 결합합니다. JSON 데이터가 있는 경우, 이를 문자열로 변환하여 `join`을 사용하면 됩니다. 예를 들어, 문자열 배열을 하나의 문자열로 결합하거나 JSON 객체의 특정 속성을 문자열로 결합할 수 있습니다. ### 예제 1: 문자열 배열 결합 ```javascript const words = ["apple", "banana", "cherry"]; const joinedWords = words.join(", "); console.log(joinedWords); // "apple, banana, cherry" ``` ### 예제 2: JSON 객체 배열의 특정 속성 결합 JSON 객체 배열이 있고, 이 배열의 특정 속성 값을 문자열로 결합하고자 할 때, `map()`과 `join()` 메서드를 함께 사용할 수 있습니다. ```javascript const data = [   { "id": 1, "name": "Alice" },   { "id": 2, "name": "Bob" },   { "id": 3, "name": "Charlie" } ]; const names = data.map(item => item.name); const joinedNames = names.join(", "); console.log(joinedNames); // "Alice, Bob, Charlie" ``` 이렇게 하면 JSON 객체 배열에서 특정 속성 (`name`)을 추출하여 하나의 문자열로 결합할 수 있습니다. ### 예제 3: 복잡한 JSON 데이터의 특정 필드 결합 좀 더 복잡한 JSON 데이터...

[JavaScript] JSON 다루기

 JSON을 JavaScript에서 다루는 것은 매우 일반적입니다. JSON(JavaScript Object Notation)은 JavaScript의 객체 표기법과 매우 유사하며, 데이터를 효과적으로 전달하고 저장하기 위한 경량의 데이터 형식입니다. ### JSON 다루기 기본 JSON은 문자열 형태로 표현됩니다. JavaScript에서는 다음과 같은 방법으로 JSON을 다룰 수 있습니다. #### 1. JSON 파싱 (Parsing) JSON 문자열을 JavaScript 객체로 변환하는 것을 '파싱'이라고 합니다. ```javascript const jsonString = '{"name": "John", "age": 30}'; const obj = JSON.parse(jsonString); console.log(obj.name); // "John" console.log(obj.age); // 30 ``` 위 예제에서 `JSON.parse()` 함수는 JSON 문자열을 파싱하여 JavaScript 객체로 변환합니다. #### 2. JavaScript 객체를 JSON 문자열로 변환하기 (Stringify) JavaScript 객체를 JSON 문자열로 변환하는 것을 '직렬화'라고 합니다. ```javascript const obj = { name: "John", age: 30 }; const jsonString = JSON.stringify(obj); console.log(jsonString); // '{"name":"John","age":30}' ``` 위 예제에서 `JSON.stringify()` 함수는 JavaScript 객체 `obj`를 JSON 형식의 문자열로 변환합니다. ### 예외 처리 JSON 파싱이나 직렬화 과정에서 발생할 수 있는 예외를 처리하는 것...

js sort

 JavaScript에서 `sort` 메서드는 배열을 정렬하는 데 사용됩니다. `sort` 메서드는 기본적으로 요소들을 문자열로 변환한 후 유니코드 값에 따라 정렬합니다. 이를 커스터마이즈하려면 비교 함수를 전달할 수 있습니다. ### 기본 사용법 ```javascript let numbers = [4, 2, 5, 1, 3]; numbers.sort(); // [1, 2, 3, 4, 5] ``` ### 비교 함수 사용 숫자나 사용자 정의 기준으로 정렬하려면 비교 함수를 전달합니다. #### 숫자 정렬 ```javascript let numbers = [4, 2, 5, 1, 3]; numbers.sort((a, b) => a - b); // 오름차순 [1, 2, 3, 4, 5] numbers.sort((a, b) => b - a); // 내림차순 [5, 4, 3, 2, 1] ``` #### 문자열 길이 기준 정렬 ```javascript let strings = ["short", "medium", "longest", "tiny"]; strings.sort((a, b) => a.length - b.length); // ["tiny", "short", "medium", "longest"] ``` ### 정렬 안정성 ES2019 이후, JavaScript의 `sort` 메서드는 안정적인 정렬을 보장합니다. 즉, 같은 값을 가진 요소들의 순서는 정렬 후에도 유지됩니다. ### 주의 사항 - `sort` 메서드는 원본 배열을 직접 변경합니다. - 비교 함수가 없으면 기본적으로 문자열 유니코드 순서로 정렬됩니다. 이러한 기본과 비교 함수를 활용하여 다양한 방식으로 배열을 정렬할 수 있습니다.

Map vs Object

JavaScript의 `Object`와 `Map`은 둘 다 키-값 쌍을 저장하는 자료구조이지만, 몇 가지 중요한 차이점이 있습니다. ### Object - **키 타입**: 문자열 또는 심볼만 키로 사용할 수 있습니다. - **순서**: 키의 순서는 삽입 순서를 보장하지 않습니다. - **성능**: 주로 간단한 구조의 데이터를 저장할 때 사용됩니다. - **기본 메서드**: `hasOwnProperty`와 같은 기본 메서드를 가지고 있습니다. ### Map - **키 타입**: 모든 값을 키로 사용할 수 있습니다 (객체 포함). - **순서**: 삽입된 순서를 보장합니다. - **성능**: 대량의 데이터 및 빈번한 삽입/삭제에 더 최적화되어 있습니다. - **메서드**: `size`, `set`, `get`, `delete`, `has` 등 다양한 메서드를 제공합니다. ### 예제 #### Object ```javascript let obj = {}; obj['key'] = 'value'; console.log(obj['key']); // "value" ``` #### Map ```javascript let map = new Map(); map.set('key', 'value'); console.log(map.get('key')); // "value" ``` ### 요약 - `Object`는 문자열/심볼 키, 삽입 순서 비보장, 간단한 데이터 저장에 적합. - `Map`은 모든 키 타입, 삽입 순서 보장, 대량 데이터/빈번한 삽입/삭제에 적합.  ### `Map` 메서드 1. **`set`**: 키-값 쌍을 추가하거나 업데이트합니다.    ```javascript    let map = new Map();    map.set('key1', 'value1');    ``` 2. **`get`**: 키에 해당하는 값...

javascript random

 JavaScript에서 랜덤 숫자를 생성하는 기본 방법은 `Math.random()` 함수를 사용하는 것입니다. 이 함수는 0 이상 1 미만의 부동소수점 의사난수를 반환합니다. 다양한 범위의 랜덤 숫자를 생성하려면, 반환된 값을 조정해야 합니다. ### 기본 사용법: ```javascript const randomNumber = Math.random(); console.log(randomNumber); // 예: 0.123456789 ``` ### 지정된 범위 내에서 랜덤 정수 생성하기: 범위를 지정하여 랜덤 정수를 생성하려면, `Math.random()` 결과를 조정하고 `Math.floor()`를 사용하여 소수점 아래를 버림 처리해야 합니다. #### 예시 1: 0 이상 10 미만의 랜덤 정수 생성 ```javascript const randomInt = Math.floor(Math.random() * 10); console.log(randomInt); // 0에서 9 사이의 정수 ``` #### 예시 2: min 이상 max 미만의 랜덤 정수 생성 ```javascript function getRandomInt(min, max) {   return Math.floor(Math.random() * (max - min)) + min; } console.log(getRandomInt(1, 10)); // 1에서 9 사이의 정수 ``` #### 예시 3: min 이상 max 이하의 랜덤 정수 생성 ```javascript function getRandomIntInclusive(min, max) {   min = Math.ceil(min);   max = Math.floor(max);   return Math.floor(Math.random() * (max - min + 1)) + min; } console.log(getRandomIntInclusive(1, 10)); // 1에서 10 사이의 정수 ``` 이 함수들은 ...

onSubmit 이벤트가 예상치 않게 작동하는 경우: form 안의 버튼은 무조건 on submit이 작동함(form 제출됨)

 React에서 `onSubmit` 이벤트가 예상치 않게 작동하는 경우는 여러 가지가 있을 수 있습니다. 코드를 보면, `onSubmit` 핸들러는 `form` 태그에 바인딩되어 있어서, "Submit" 버튼을 클릭하면 `makeCrossWord` 함수가 호출되어야 합니다. 하지만, 어떤 상황에서는 사용자가 "Submit" 버튼을 클릭하지 않았음에도 불구하고 이 함수가 호출되는 것처럼 보일 수 있는데, 그 원인 중 일부를 살펴보겠습니다: 1. **버튼의 기본 타입**: HTML에서 `<button>` 태그의 기본 `type`은 `submit`입니다. 이는 `<button>`이 `form` 내에 있을 때, 클릭되면 `form`의 `onSubmit` 이벤트를 발생시킨다는 것을 의미합니다. 코드 내에 "목록 보이기" 옆에 있는 추가 버튼(`<button onClick={...}>+</button>`)에 `type="button"`을 명시적으로 추가하지 않으면, 이 버튼이 클릭될 때도 `form`이 제출될 수 있습니다. 이를 해결하기 위해, 해당 버튼에 `type="button"`을 추가해 보세요:    ```jsx    <button      type="button"      onClick={() => {        setwordLst([...wordlst, ""]);      }}    >      +    </button>    ``` 2. **이벤트 버블링**: 때때로, 버튼 클릭 이벤트가 상위 DOM 요소로 전파되어 `form`의 `onSubmit`을 실수로 트리거할 수 있습니다. 그러나 이 사례에서는 `e.preventDefault()`가 `onSub...

javascript에서의 deep copy

# 객체를 깊은 복사  JavaScript에서 객체의 깊은 복사 (deep copy)를 수행하는 방법은 여러 가지가 있지만, 가장 간단하고 자주 사용되는 방법 중 하나는 `JSON.parse()`와 `JSON.stringify()`를 조합하는 것입니다. 이 방법은 객체를 JSON 문자열로 변환한 다음, 이 문자열을 다시 객체로 파싱하여 깊은 복사본을 생성합니다. 다음은 이 방법을 사용한 예시입니다: ```javascript const original = {   name: 'John',   age: 30,   details: {     hobbies: ['reading', 'games'],     location: 'New York'   } }; const deepCopy = JSON.parse(JSON.stringify(original)); // 이제 deepCopy는 original의 깊은 복사본입니다. // original과 완전히 분리되어 있으며, 구조는 같지만 서로 다른 메모리를 차지합니다. ``` 그러나 이 방법에는 몇 가지 한계가 있습니다: - 메서드(함수)를 포함한 객체를 깊은 복사할 때는 메서드가 복사되지 않습니다. - `Date` 객체, `RegExp` 객체 같은 특수 객체들이나 `undefined`, `Function` 같은 값들은 적절히 복사되지 않을 수 있습니다. - 순환 참조가 있는 객체를 이 방법으로 복사하려고 하면 오류가 발생합니다. 만약 이러한 한계로 인해 문제가 발생한다면, Lodash 라이브러리 같은 외부 라이브러리의 깊은 복사 기능을 사용하는 것을 고려할 수 있습니다. Lodash의 `_.cloneDeep` 함수는 위에서 언급한 제한 사항들을 해결하고 더 복잡한 객체도 잘 처리할 수 있습니다. ```javascript // Lodash 라이브러리의 예시 const _ = require('lodash'); const deepCopy = _.cloneD...

js shuffle 귀찮

  js shuffle 하려고 하면서 느낀점이 파이썬은 다 기본제공인데 너무 귀찮다는 것이었다. Python은 매우 편리한 표준 라이브러리와 내장 함수들을 제공해서, 여러 작업들을 매우 간단하게 처리할 수 있죠. 예를 들어, Python에서는 리스트를 무작위로 섞기 위해 `random.shuffle()` 함수를 바로 사용할 수 있습니다: ```python import random my_list = [1, 2, 3, 4, 5] random.shuffle(my_list) print(my_list) ``` JavaScript와 같은 다른 언어들에서는 이러한 편의성을 직접 구현해야 할 때가 많습니다. 그래서 때로는 JavaScript에 Python의 편리함이 그리울 수도 있어요. 그러나, JavaScript는 웹 개발에서의 강력한 기능과 유연성으로 널리 사용되며, 다양한 라이브러리와 프레임워크를 통해 이러한 차이를 극복하고 있어요.  각 언어마다 장단점과 사용 사례가 다르기 때문에, 상황에 맞게 적절한 언어를 선택하는 것이 중요합니다. 때로는 더 많은 코드를 작성해야 할 수도 있지만, 그 과정에서 해당 언어의 더 깊은 이해와 프로그래밍 능력의 향상을 기대할 수 있어요. 파이썬이 특히 편리하게 느껴지는 이유 중 하나는 그 설계 철학과 목표에 있어요. 파이썬의 창시자 귀도 반 로섬은 사용하기 쉽고, 읽기 쉬운 언어를 만들고자 했어요. 파이썬의 공식 모토인 "There should be one-- and preferably only one --obvious way to do it."는 이러한 설계 철학을 잘 반영하고 있죠. 이 때문에 파이썬은 초보자부터 전문가까지 널리 사용되며, 다양한 분야에서 인기가 많습니다. JavaScript는 원래 웹 브라우저 내에서 작동하는 스크립트 언어로 시작했어요. 따라서 그 초점은 동적인 웹 콘텐츠 생성에 맞춰져 있었죠. 시간이 지나면서 Node.js의 등장으로 서버 측 개발에도 사용되기 시작했고, 이제는 웹 개발뿐만 아니...

javascript shuffle은 보통 Fisher-Yates 알고리즘을 활용한다

 JavaScript에서 배열의 원소들을 무작위로 섞으려면, 일반적으로 Fisher-Yates (또는 Knuth) 셔플 알고리즘을 사용합니다. 이 방법은 배열 내의 각 원소에 대해 임의의 다른 위치를 선택하고, 두 위치의 원소를 교환함으로써 배열을 무작위로 섞는 효율적인 방법입니다. 다음은 Fisher-Yates 셔플 알고리즘을 사용하여 JavaScript에서 배열을 섞는 방법의 예시입니다: ```javascript function shuffleArray(array) {     for (let i = array.length - 1; i > 0; i--) {         // 0에서 i 사이의 임의의 인덱스를 선택         const j = Math.floor(Math.random() * (i + 1));         // array[i]와 array[j]를 교환         [array[i], array[j]] = [array[j], array[i]];     }     return array; } // 사용 예시 const myArray = [1, 2, 3, 4, 5]; shuffleArray(myArray); console.log(myArray); // myArray는 이제 무작위로 섞여 있음 ``` 이 코드는 배열 `array`를 매개변수로 받아, 그 배열의 원소들을 무작위로 섞은 후 그 배열을 반환합니다. `Math.random()` 함수는 0 이상 1 미만의 부동소수점 의사난수를 반환하므로, `Math.floor(Math.random() * (i + 1))`는 0 이상 `i` 이하의 정수 중 하나를 무작위로 선택합니다. 이 선택된 인덱스를 사용하여 현재 인덱스 `i`의 원소와 교환함으로써 배열을 섞습니다. --- 느낀점: 파이썬은 다 ...

javascript sort

js에 sort함수는 python 처럼 key로 sort하기 JavaScript의 `sort` 함수는 Python의 `sort` 함수와 같이 직접적으로 `key` 인자를 지원하지 않습니다. 그러나 JavaScript에서는 `sort` 함수에 비교 함수를 제공하여 객체 배열을 속성 값에 따라 정렬할 수 있습니다. 이 비교 함수는 두 요소를 인자로 받아서, 첫 번째 요소가 두 번째 요소보다 작을 경우 음수를, 같을 경우 0을, 큰 경우 양수를 반환해야 합니다. 이를 통해 Python의 `key` 인자와 유사한 기능을 구현할 수 있습니다. 예를 들어, 객체의 특정 속성을 기준으로 배열을 정렬하려면 다음과 같이 할 수 있습니다: ```javascript let items = [     { name: "Banana", quantity: 2 },     { name: "Apple", quantity: 10 },     { name: "Orange", quantity: 5 } ]; // name 속성을 기준으로 오름차순 정렬 items.sort((a, b) => a.name.localeCompare(b.name)); // quantity 속성을 기준으로 오름차순 정렬 items.sort((a, b) => a.quantity - b.quantity); ``` 여기서 `localeCompare`는 문자열 비교를 위해 사용되며, 문자열 속성을 기준으로 배열을 정렬할 때 유용합니다. 숫자 속성의 경우 간단히 두 값을 빼서 정렬 순서를 결정할 수 있습니다. 따라서 JavaScript에서는 `sort` 함수의 비교 함수를 적절히 정의하여 Python의 `key` 인자와 비슷한 기능을 구현할 수 있습니다. 좀 더 단순화해서 설명해볼게요. JavaScript에서 배열을 정렬할 때 `sort()` 함수를 사용하는데, 이 함수 안에 또 다른 함수를 넣어서 "어떻게" 정렬할지 정의할 수 있어요. 이 내부 함수를...

깊은 복사 JSON.parse(JSON.stringify(array))

JSON.parse(JSON.stringify(word_map)) ### 코드의 작동 원리 1. **`JSON.stringify(word_map)`**: 먼저 `word_map` 객체를 JSON 문자열로 변환합니다. 이 과정에서 객체의 구조는 보존되지만, 모든 것이 문자열 형태로 변환됩니다. 이 변환 과정에서 함수, `undefined`, 심볼과 같은 JSON으로 표현할 수 없는 값들은 무시되거나 삭제됩니다. 2. **`JSON.parse(...)`**: 그 다음, `JSON.stringify`로 생성된 문자열을 다시 객체로 변환합니다. `JSON.parse` 메서드는 JSON 문자열을 받아 해당 문자열을 기반으로 새로운 JavaScript 객체를 생성합니다. ### 코드 사용 시 고려할 점 - **함수, `undefined`, 심볼 무시**: 이 방법은 객체 내의 함수, `undefined`, 심볼 값 등 JSON에서 지원하지 않는 값을 복사하지 않습니다. 따라서 이러한 값들은 결과 객체에 포함되지 않습니다. - **원형(Prototype) 정보 누락**: 복사된 객체는 원본 객체의 프로토타입 체인을 상속받지 않습니다. 즉, 원본 객체가 특정 클래스의 인스턴스였다면, 복사된 객체는 단순한 리터럴 객체가 되며 해당 클래스의 메서드나 속성을 가지지 않습니다. - **성능 고려**: 대용량 객체를 다룰 때 이 방법은 성능 저하를 일으킬 수 있습니다. 객체를 문자열로 변환하고 다시 객체로 파싱하는 과정은 비용이 많이 드는 연산입니다. - **순환 참조 문제**: 객체 내부에 순환 참조가 있는 경우(`obj.a = obj`와 같이 자기 자신을 참조하는 경우), `JSON.stringify`는 에러를 발생시킵니다. 이는 JSON 형식이 순환 참조를 지원하지 않기 때문입니다. 이러한 이유로, 이 방법은 단순한 객체를 깊은 복사할 필요가 있을 때 유용할 수 있지만, 모든 상황에 적합한 것은 아닙니다. 객체의 구조가 복잡하거나, 특정 타입의 값을 포함하고 있거나, 성능이 중...

js vs python

JavaScript에는 Python의 딕셔너리와 비슷한 데이터 구조로 '객체(Object)'가 있습니다. JavaScript의 객체는 키와 값의 쌍으로 이루어져 있으며, Python의 딕셔너리와 유사한 방법으로 사용할 수 있습니다. 예를 들어: Python 딕셔너리: ```python my_dict = {   "name": "John",   "age": 30,   "city": "New York" } print(my_dict["name"])  # John 출력 ``` JavaScript 객체: ```javascript var myObj = {   name: "John",   age: 30,   city: "New York" }; console.log(myObj.name);  // John 출력 ``` JavaScript에서도 객체의 속성에 접근하기 위해 대괄호(`[]`)를 사용할 수 있으며, 이 경우 속성 이름을 문자열로 지정해야 합니다: ```javascript console.log(myObj["name"]);  // John 출력 ``` 이렇게 JavaScript의 객체는 Python의 딕셔너리와 매우 유사한 기능을 제공합니다. var myObj = {   name: "John",   age: 30 }; // 새 속성 추가 myObj.city = "New York"; // 기존 속성 변경 myObj.age = 31; console.log(myObj); // 출력: {name: "John", age: 31, city: "New York"} JavaScript 객체와 Python의 딕셔너리는 비슷한 방식으로 데이터를 저장하고 관리하지만, 각 언어에서의 역할과 사용법에는 차이가 있습니다. 그럼에도 불구하고 JavaScr...

touch over.. pointerover 가 모바일에서 작동 안하는 문제해결

 touch에는 기본적으로 touch over라는게 없다. 터치가 그런식으로 작동하지 않기때문.. 해결 과정 touch-action을 none으로 바꿔서 브라우저가 터치 액션을 네이티브 액션으로 캐치하지 않도록 하자 https://stackoverflow.com/questions/48124372/pointermove-event-not-working-with-touch-why-not -> 이건 실패 이걸로 해결했다 https://stackoverflow.com/questions/70973822/no-pointerenter-event-if-you-touch-and-then-move-into-element ``` function handlePointerDown ( e ) { e. target . releasePointerCapture (e. pointerId ) } ``` e.target.releasePointerCapture(e.pointerId)는 이벤트와 연관된 포인터의 캡처를 해제합니다. 여기서 e.target은 이벤트가 발생한 요소, e.pointerId는 이벤트를 발생시킨 포인터의 고유 식별자입니다. 포인터 캡처는 요소가 포인터 이벤트(예: 마우스, 터치)를 독점적으로 받도록 할 때 사용됩니다. 이 코드는 특정 상황에서 포인터 캡처를 해제하여 다른 요소들도 포인터 이벤트를 받을 수 있도록 하는데 사용됩니다.