JavaScript 배열 방법의 알고리즘.
JavaScript 배열에는 배열의 데이터를 조작하고 검색할 수 있는 다양한 내장 메서드가 함께 제공됩니다. 개요에서 추출된 배열 메소드 목록은 다음과 같습니다.
- 연결()
- 가입()
- 채우기()
- 포함()
- indexOf()
- 역방향()
- 정렬()
- 스플라이스()
- ()에서
- copyWithin()
- 플랫()
- Array.from()
- 마지막 인덱스()
- 각각()
- 모든()
- 항목()
- 값()
- toReversed()(원본을 수정하지 않고 배열의 역방향 복사본 생성)
- toSorted()(원본을 수정하지 않고 정렬된 배열 복사본 생성)
- toSpliced()(원본을 수정하지 않고 요소를 추가하거나 제거하여 새 배열 생성)
- with()(특정 요소가 대체된 배열의 복사본을 반환)
- Array.fromAsync()
- Array.of()
- 지도()
- 플랫맵()
- 줄이기()
- reduceRight()
- 일부()
- 찾기()
- findIndex()
- 마지막 찾기()
각 JavaScript 배열 방법에 사용되는 일반적인 알고리즘을 분석하겠습니다.
1. 연결()
- 알고리즘: 선형 추가/병합
- 시간 복잡도: O(n) 여기서 n은 모든 배열의 전체 길이입니다
- 내부적으로 반복을 사용하여 새 배열을 만들고 요소를 복사합니다.
// concat() Array.prototype.myConcat = function(...arrays) { const result = [...this]; for (const arr of arrays) { for (const item of arr) { result.push(item); } } return result; };
2. 조인()
- 알고리즘: 문자열 연결을 통한 선형 순회
- 시간 복잡도: O(n)
- 배열 요소를 반복하고 결과 문자열을 작성합니다.
// join() Array.prototype.myJoin = function(separator = ',') { let result = ''; for (let i = 0; i <h3> 3. 채우기() </h3>
- 알고리즘: 할당을 통한 선형 순회
- 시간 복잡도: O(n)
- 값 할당을 통한 간단한 반복
// fill() Array.prototype.myFill = function(value, start = 0, end = this.length) { for (let i = start; i <h3> 4. 포함() </h3>
- 알고리즘: 선형 검색
- 시간 복잡도: O(n)
- 요소를 찾거나 끝에 도달할 때까지 순차적 스캔
// includes() Array.prototype.myIncludes = function(searchElement, fromIndex = 0) { const startIndex = fromIndex >= 0 ? fromIndex : Math.max(0, this.length + fromIndex); for (let i = startIndex; i <h3> 5. 인덱스오브() </h3>
- 알고리즘: 선형 검색
- 시간 복잡도: O(n)
- 시작부터 일치하는 항목을 찾을 때까지 순차적 스캔
// indexOf() Array.prototype.myIndexOf = function(searchElement, fromIndex = 0) { const startIndex = fromIndex >= 0 ? fromIndex : Math.max(0, this.length + fromIndex); for (let i = startIndex; i <h3> 6. 역방향() </h3>
- 알고리즘: 두 포인터 스왑
- 시간 복잡도: O(n/2)
- 시작/끝에서 안쪽으로 이동하면서 요소를 바꿉니다.
// reverse() Array.prototype.myReverse = function() { let left = 0; let right = this.length - 1; while (left <h3> 7. 정렬() </h3>
- 알고리즘: 일반적으로 TimSort(병합 정렬과 삽입 정렬의 하이브리드)
- 시간 복잡도: O(n log n)
- 최신 브라우저는 적응형 정렬 알고리즘을 사용합니다.
// sort() Array.prototype.mySort = function(compareFn) { // Implementation of QuickSort for simplicity // Note: Actual JS engines typically use TimSort const quickSort = (arr, low, high) => { if (low { const pivot = arr[high]; let i = low - 1; for (let j = low; j <h3> 8. 스플라이스() </h3>
- 알고리즘: 선형 배열 수정
- 시간 복잡도: O(n)
- 요소를 이동하고 배열을 내부에서 수정합니다.
// splice() Array.prototype.mySplice = function(start, deleteCount, ...items) { const len = this.length; const actualStart = start 0) { // Moving elements right for (let i = len - 1; i >= actualStart + actualDeleteCount; i--) { this[i + shiftCount] = this[i]; } } else if (shiftCount <h3> 9. 에서() </h3>
- 알고리즘: 직접 인덱스 액세스
- 시간 복잡도: O(1)
- 경계 확인을 통한 간단한 배열 인덱싱
// at() Array.prototype.myAt = function(index) { const actualIndex = index >= 0 ? index : this.length + index; return this[actualIndex]; };
10. 카피내()
- 알고리즘: 블록 메모리 복사
- 시간 복잡도: O(n)
- 내부 메모리 복사 및 이동 작업
// copyWithin() Array.prototype.myCopyWithin = function(target, start = 0, end = this.length) { const len = this.length; let to = target <h3> 11. 플랫() </h3>
- 알고리즘: 재귀적 깊이 우선 탐색
- 시간 복잡도: 단일 레벨의 경우 O(n), 깊이 d의 경우 O(d*n)
- 중첩 배열을 재귀적으로 평면화합니다.
// flat() Array.prototype.myFlat = function(depth = 1) { const flatten = (arr, currentDepth) => { const result = []; for (const item of arr) { if (Array.isArray(item) && currentDepth <h3> 12. 배열.from() </h3>
- 알고리즘: 반복 및 복사
- 시간 복잡도: O(n)
- iterable에서 새 배열을 생성합니다.
// Array.from() Array.myFrom = function(arrayLike, mapFn) { const result = []; for (let i = 0; i <h3> 13. 마지막 인덱스() 찾기 </h3>
- 알고리즘: 역선형 탐색
- 시간 복잡도: O(n)
- 끝부터 일치하는 항목을 찾을 때까지 순차적 스캔
// findLastIndex() Array.prototype.myFindLastIndex = function(predicate) { for (let i = this.length - 1; i >= 0; i--) { if (predicate(this[i], i, this)) return i; } return -1; };
14. 각()
- 알고리즘: 선형 반복
- 시간 복잡도: O(n)
- 콜백 실행을 통한 간단한 반복
// forEach() Array.prototype.myForEach = function(callback) { for (let i = 0; i <h3> 15. 매() </h3> <p>알고리즘: 단락 선형 스캔<br> 시간 복잡도: O(n)<br> 첫 번째 거짓 조건에서 중지<br> </p><pre class="brush:php;toolbar:false">// concat() Array.prototype.myConcat = function(...arrays) { const result = [...this]; for (const arr of arrays) { for (const item of arr) { result.push(item); } } return result; };
16. 항목()
- 알고리즘: 반복자 프로토콜 구현
- 시간 복잡도: 생성의 경우 O(1), 전체 반복의 경우 O(n)
- 반복자 객체 생성
// join() Array.prototype.myJoin = function(separator = ',') { let result = ''; for (let i = 0; i <h3> 17. 가치() </h3>
- 알고리즘: 반복자 프로토콜 구현
- 시간 복잡도: 생성의 경우 O(1), 전체 반복의 경우 O(n)
- 값에 대한 반복자를 생성합니다.
// fill() Array.prototype.myFill = function(value, start = 0, end = this.length) { for (let i = start; i <h3> 18. toReversed() </h3>
- 알고리즘: 역반복으로 복사
- 시간 복잡도: O(n)
- 새 역방향 배열 생성
// includes() Array.prototype.myIncludes = function(searchElement, fromIndex = 0) { const startIndex = fromIndex >= 0 ? fromIndex : Math.max(0, this.length + fromIndex); for (let i = startIndex; i <h3> 19. 정렬() </h3>
- 알고리즘: 복사 후 TimSort
- 시간 복잡도: O(n log n)
- 표준 정렬을 사용하여 정렬된 복사본을 만듭니다.
// indexOf() Array.prototype.myIndexOf = function(searchElement, fromIndex = 0) { const startIndex = fromIndex >= 0 ? fromIndex : Math.max(0, this.length + fromIndex); for (let i = startIndex; i <h3> 20. 스플라이스() </h3>
- 알고리즘: 수정하여 복사
- 시간 복잡도: O(n)
- 수정된 사본 생성
// reverse() Array.prototype.myReverse = function() { let left = 0; let right = this.length - 1; while (left <h3> 21. 와() </h3>
- 알고리즘: 단일 수정으로 얕은 복사
- 시간 복잡도: O(n)
- 하나의 요소가 변경된 복사본을 만듭니다.
// sort() Array.prototype.mySort = function(compareFn) { // Implementation of QuickSort for simplicity // Note: Actual JS engines typically use TimSort const quickSort = (arr, low, high) => { if (low { const pivot = arr[high]; let i = low - 1; for (let j = low; j <h3> 22. 배열.fromAsync() </h3>
- 알고리즘: 비동기식 반복 및 수집
- 시간 복잡성: O(n) 비동기 작업
- Promise 및 비동기 반복 가능 항목을 처리합니다.
// splice() Array.prototype.mySplice = function(start, deleteCount, ...items) { const len = this.length; const actualStart = start 0) { // Moving elements right for (let i = len - 1; i >= actualStart + actualDeleteCount; i--) { this[i + shiftCount] = this[i]; } } else if (shiftCount <h3> 23. 배열.의() </h3>
- 알고리즘: 직접 배열 생성
- 시간 복잡도: O(n)
- 인수에서 배열을 생성합니다.
// at() Array.prototype.myAt = function(index) { const actualIndex = index >= 0 ? index : this.length + index; return this[actualIndex]; };
24. 지도()
- 알고리즘: 변환 반복
- 시간 복잡도: O(n)
- 변환된 요소로 새 배열을 만듭니다.
// copyWithin() Array.prototype.myCopyWithin = function(target, start = 0, end = this.length) { const len = this.length; let to = target <h3> 25. 플랫맵() </h3>
- 알고리즘: 지도 평면화
- 시간 복잡도: O(n*m) 여기서 m은 평균 매핑된 배열 크기입니다
- 매핑과 평면화 결합
// flat() Array.prototype.myFlat = function(depth = 1) { const flatten = (arr, currentDepth) => { const result = []; for (const item of arr) { if (Array.isArray(item) && currentDepth <h3> 26. 감소() </h3>
- 알고리즘: 선형 누적
- 시간 복잡도: O(n)
- 콜백을 통한 순차적 축적
// Array.from() Array.myFrom = function(arrayLike, mapFn) { const result = []; for (let i = 0; i <h3> 27. 감소오른쪽() </h3>
- 알고리즘: 역선형 누적
- 시간 복잡도: O(n)
- 오른쪽에서 왼쪽으로 누적
// findLastIndex() Array.prototype.myFindLastIndex = function(predicate) { for (let i = this.length - 1; i >= 0; i--) { if (predicate(this[i], i, this)) return i; } return -1; };
28. 좀()
- 알고리즘: 단락 선형 스캔
- 시간 복잡도: O(n)
- 첫 번째 참 조건에서 중지
// forEach() Array.prototype.myForEach = function(callback) { for (let i = 0; i <h3> 29. 찾기() </h3>
- 알고리즘: 선형 검색
- 시간 복잡도: O(n)
- 조건이 충족될 때까지 순차적 스캔
// every() Array.prototype.myEvery = function(predicate) { for (let i = 0; i <h3> 30. 찾기인덱스() </h3>
- 알고리즘: 선형 검색
- 시간 복잡도: O(n)
- 일치 조건에 대한 순차적 스캔
// entries() Array.prototype.myEntries = function() { let index = 0; const array = this; return { [Symbol.iterator]() { return this; }, next() { if (index <h3> 31. 마지막 찾기() </h3>
- 알고리즘: 역선형 탐색
- 시간 복잡도: O(n)
- 끝부터 순차적 스캔
// concat() Array.prototype.myConcat = function(...arrays) { const result = [...this]; for (const arr of arrays) { for (const item of arr) { result.push(item); } } return result; };
귀하께서 요청하신 배열 메소드 31개를 모두 완벽하게 구현했습니다.
? LinkedIn에서 나와 연결하세요:
소프트웨어 엔지니어링의 세계로 함께 더 깊이 들어가 보세요! 저는 JavaScript, TypeScript, Node.js, React, Next.js, 데이터 구조, 알고리즘, 웹 개발 등에 대한 통찰력을 정기적으로 공유합니다. 기술을 향상하고 싶거나 흥미로운 주제에 대해 공동작업을 하고 싶다면, 저는 여러분과 소통하고 성장하고 싶습니다.
팔로우: 노지불 이슬람
위 내용은 JavaScript 배열 메서드의 알고리즘의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

javaScriptisNotBuiltoncorc; it'SangretedLanguageThatrunsonOngineStenWrittenInc .1) javaScriptWasDesignEdasAlightweight, 해석 hanguageforwebbrowsers.2) Endinesevolvedfromsimpleplemporectreterstoccilpilers, 전기적으로 개선된다.

JavaScript는 프론트 엔드 및 백엔드 개발에 사용할 수 있습니다. 프론트 엔드는 DOM 작업을 통해 사용자 경험을 향상시키고 백엔드는 Node.js를 통해 서버 작업을 처리합니다. 1. 프론트 엔드 예 : 웹 페이지 텍스트의 내용을 변경하십시오. 2. 백엔드 예제 : node.js 서버를 만듭니다.

Python 또는 JavaScript는 경력 개발, 학습 곡선 및 생태계를 기반으로해야합니다. 1) 경력 개발 : Python은 데이터 과학 및 백엔드 개발에 적합한 반면 JavaScript는 프론트 엔드 및 풀 스택 개발에 적합합니다. 2) 학습 곡선 : Python 구문은 간결하며 초보자에게 적합합니다. JavaScript Syntax는 유연합니다. 3) 생태계 : Python에는 풍부한 과학 컴퓨팅 라이브러리가 있으며 JavaScript는 강력한 프론트 엔드 프레임 워크를 가지고 있습니다.

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr

Node.js는 크림 덕분에 효율적인 I/O에서 탁월합니다. 스트림은 메모리 오버로드를 피하고 큰 파일, 네트워크 작업 및 실시간 애플리케이션을위한 메모리 과부하를 피하기 위해 데이터를 점차적으로 처리합니다. 스트림을 TypeScript의 유형 안전과 결합하면 Powe가 생성됩니다

파이썬과 자바 스크립트 간의 성능과 효율성의 차이는 주로 다음과 같이 반영됩니다. 1) 해석 된 언어로서, 파이썬은 느리게 실행되지만 개발 효율이 높고 빠른 프로토 타입 개발에 적합합니다. 2) JavaScript는 브라우저의 단일 스레드로 제한되지만 멀티 스레딩 및 비동기 I/O는 Node.js의 성능을 향상시키는 데 사용될 수 있으며 실제 프로젝트에서는 이점이 있습니다.

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Dreamweaver Mac版
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!