JavaScript 배열에 대한 일반적인 작업 요약 및 공유
이 문서는 배열 생성, 배열 여부 확인, 유사 배열 및 배열 변환, 배열 중복 제거와 관련된 문제를 포함하여 javascript의 일반적인 배열 작업에 대한 관련 지식을 제공합니다.
관련 추천: javascript 학습 튜토리얼
배열 만들기
배열을 만드는 것은 기본적인 기술이며, 그 방법은 주로 다음과 같습니다.
const arr = [1,2,3] // 数组字面量const arr = [,,,] // 三元素空位数组(hole array)const arr = new Array(4) // [,,,,]const arr = new Array(4,2) // [4,2]const arr = Array.of(1,2,3) // [1,2,3]
그 중에서 가장 일반적으로 사용되는 방법은 배열 리터럴입니다. 방법.
배열인지 확인
배열인지 확인하는 주요 방법은 다음과 같습니다.
// 方法一[1,2,3] instanceof Array // 方法二[1,2,3].constructor === Array // 方法三Object.prototype.toString.call([1,2,3]) === '[object Array]' // 方法四Array.isArray([1,2,3]) // 方法五(兼容写法)function isArray(arr){ return Array.isArray ? Array.isArray(arr):Object.prototype.toString.call(arr) === '[object Array]'}
일반적으로 가장 일반적으로 사용되는 방법은 isArray
방법입니다. isArray
方法。
类数组和数组的转换
我们有时碰到的数据结构不是纯数组,一般将其归类为“类数组”,类数组可以借助以下方法转为纯数组:
const x = document.querySelectorAll('a'); // 方法一Array.prototype.slice.call(x); // 方法二Array.from(x);Array.from(x,mapFn,thisArg); // 方法三[...x] // 方法四function toArray(x){ let res = [] for(item of x){ res.push(item) } return res} // 方法五Array.apply(null,x) // 方法六[].concat.apply([],x)
方法五和六本质上都是利用了 apply 的特点,即传给 apply 的第二个参数(数组或者类数组)会被转换为一个参数列表,这些参数再送到调用的方法(new Array 或者 concat)中。
数组去重
数组去重,本质上都需要比较两个元素是否相等,如果相等,则抛弃一个元素。为了准确地判断,这里统一使用 Object.is
进行比较。
1)利用 set 去重
set 要求元素不重复,因此将数组转换为 set 之后就可以去重了,接着再转换回数组即可。
function unique(arr){ return Array.from(new Set(arr)) // return [...new Set(arr)]}
2)双重循环 + splice
外层循环遍历所有元素,里层循环遍历当前元素往后的所有元素,若发现相等则利用 splice 移除掉一个。记得里层循环每次要回退一格,否则会遗漏掉某些元素
function unique(arr){ for(let i = 0;i < arr.length;i++){ for(let j = i + 1;i < arr.length;j++){ if(Object.is(arr[i],arr[j])){ arr.splice(j,1) j-- } } } return arr}
3)新建数组 + includes
新建数组,每次往数组中添加元素之前都检查数组中是否已有该元素:
function unique(arr){ const res = [] arr.forEach((item,index) => { // 也可以 if(res.indexOf(item) == -1),但是无法正确判断 NaN if(!res,includes(item)){ res.push(item) } })}
4)reduce + includes
function unique(arr){ return arr.reduce((acc,cur) => { // return acc.includes(cur) ? acc : acc.concat(cur) return acc.includes(cur) ? acc : [...acc,cur] },[])}
5)新建数组 + sort
根据 sort 的机制(在每个元素上调用 toStrng,之后在字符串层面进行排序),让相等的元素聚集在一起。新建数组,每次往数组中添加元素之前都检查该元素是否等于前面的元素,是则属于重复元素:
function unique(arr){ arr.sort() const res = [arr[0]] for(let i = 1;i < arr.length;i++){ if(!Object.is(arr[i],arr[i-1])){ res.push(arr[i]) } } return res}
6)新建数组 + 利用对象属性
这种方法其实和“新建数组 + includes”一样。新建数组,每次往数组中添加元素之前都检查该元素是否已经作为对象的属性:
// 对象属性值可以认为是元素重复的次数function unique(arr){ const res = [] const obj = {} arr.forEach((item,index) => { if(!obj[item]){ res.push(item) obj[item] = 1 } else { obj[item]++ } }) return res}
这里检测的是对象的属性名,而属性名本质上是一个字符串,因此会认为 obj[true]
和 obj["true"]
是相等的,从而导致元素 true
或者元素 "true"
function unique(arr){ let map = new Map() for(item of arr){ if(!map.has(item)){ map.set(item,true) } } return [...map.keys()]}
어레이 중복 제거에는 기본적으로 두 요소가 동일한지 비교해야 하며, 그렇다면 요소 하나를 폐기해야 합니다. 여기서는 정확한 판단을 위해 Object.is
를 비교용으로 사용했습니다. 1) 집합을 사용하여 중복 제거
function unique(arr){ return arr.filter((item,index) => index === arr.indexOf(item))}
외부 루프는 모든 요소를 순회하고, 내부 루프는 현재 요소 뒤의 모든 요소를 순회합니다. 두 요소가 동일하다고 판단되면 스플라이스를 사용하여 하나를 제거합니다. 내부 루프는 매번 한 칸 뒤로 이동해야 한다는 점을 기억하세요. 그렇지 않으면 일부 요소가 누락될 수 있습니다rrreee
3) 새 배열 만들기 + 포함
obj[true]
와 obj["true"]
가 동일한 것으로 간주되어 true
요소가 됩니다. 또는 "true"
요소가 존재하지 않는 경우 새 배열에 넣을 수 있습니다. 🎜🎜7) map🎜🎜을 사용하는 것은 기본적으로 위의 방법과 동일하지만 새 배열을 만들 필요는 없습니다. 🎜rrreee🎜8) 필터 + indexOf🎜🎜 중복 요소를 제거하고 다른 각도에서 이해하세요. 🎜처음 나타날 때 🎜index🎜가 index🎜와 동일한 요소를 유지하세요. 이러한 요소는 필터로 필터링하여 array: 🎜rrreee🎜indexOf 사용의 단점은 NaN을 올바르게 판단할 수 없다는 것입니다. 🎜🎜관련 권장 사항: 🎜javascript 학습 튜토리얼🎜🎜🎜위 내용은 JavaScript 배열에 대한 일반적인 작업 요약 및 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

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

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











HTML의 테이블 테두리 안내. 여기에서는 HTML의 테이블 테두리 예제를 사용하여 테이블 테두리를 정의하는 여러 가지 방법을 논의합니다.

HTML 여백-왼쪽 안내. 여기에서는 HTML margin-left에 대한 간략한 개요와 코드 구현과 함께 예제를 논의합니다.

HTML의 Nested Table에 대한 안내입니다. 여기에서는 각 예와 함께 테이블 내에 테이블을 만드는 방법을 설명합니다.

HTML 테이블 레이아웃 안내. 여기에서는 HTML 테이블 레이아웃의 값에 대해 예제 및 출력 n 세부 사항과 함께 논의합니다.

HTML 입력 자리 표시자 안내. 여기서는 코드 및 출력과 함께 HTML 입력 자리 표시자의 예를 논의합니다.

HTML 순서 목록에 대한 안내입니다. 여기서는 HTML Ordered 목록 및 유형에 대한 소개와 각각의 예에 대해서도 설명합니다.

HTML에서 텍스트 이동 안내. 여기서는 Marquee 태그가 구문과 함께 작동하는 방식과 구현할 예제에 대해 소개합니다.

HTML onclick 버튼에 대한 안내입니다. 여기에서는 각각의 소개, 작업, 예제 및 다양한 이벤트의 onclick 이벤트에 대해 설명합니다.
