JavaScript 배열 방법 요약
JavaScript의 배열은 전체 배열과 목록이 있는 C 또는 Java와 달리 JS의 배열은 4대 작업인 팝, 푸시, 큐로 사용할 수 있습니다. 변속, 변속 해제.
배열 방식의 경우 저희가 가장 우려하는 두 가지 문제가 있습니다. 반환 값은 무엇이며 원본 배열에 영향을 미칠까요 대표적인 예로는 스플라이스(splice)와 슬라이스(slice) 방식이 있습니다. 원래 배열을 반환하는 함수의 경우 호출을 배열에 직접 연결할 수 있습니다. 이는 매우 멋진 방법입니다(array.filter().sort().reverse()).
Array의 배열 방식을 이 두 가지 질문으로 요약하고 싶습니다.
Array
Array.length는 배열의 길이입니다. 각각의 새로운 배열 개체는 Array.prototype을 통해 수정할 수 있지만 기본 사용 및 작동은 다음과 같습니다. 배열은 오늘날의 것과 다릅니다. 집중해서 배열 방법을 살펴보겠습니다.
일반적으로 배열 메소드의 끝에는 내부 this 포인터를 지정하는 thisArg 매개변수가 있습니다. 매개변수에 폴백 함수가 있는 경우 이 폴백 함수는 일반적으로 값, 인덱스, 배열의 세 가지 매개변수를 허용합니다. 이는 각각 현재 전달된 값, 현재 전달된 값이 있는 인덱스 및 현재 처리된 배열을 나타냅니다.
디렉터리 인덱스:
concat
이 방법을 사용하여 배열을 연결할 수 있습니다. 매개변수는 하나 이상의 배열이고 반환된 결과는 연결된 배열입니다.
concat 메소드는 새 배열을 생성한 다음 객체(이것이 가리키는 객체, 원래 배열)의 요소와 배열 유형 매개변수 및 비배열 유형의 요소를 사용하여 이를 호출합니다. 모든 매개변수에서 매개변수 자체가 이 새 배열에 순서대로 입력되고 해당 배열이 반환됩니다. concat 메소드는 원래 배열과 매개변수 배열을 수정하지 않으며 배열이 아닌 객체에도 동일한 효과를 갖습니다.
연결된 새 배열을 반환합니다.
-
원래 배열과 매개변수 배열을 수정하지 않습니다. >
매개변수는 배열이 아닐 수 있습니다. - every
var a1 = [1, 2, 3], a2 = [4, 5, 6], a3 = [7, 8, 9]; var newarr = a1.concat(a2, a3); newarr //[1, 2, 3, 4, 5, 6, 7, 8, 9] a1 //[1, 2, 3] newarr = a1.concat(4, a3);//[1, 2, 3, 4, 7, 8, 9] newarr = a1.concat('hello');//[1, 2, 3, "hello"] 로그인 후 복사 |
- 은 원래 배열에 영향을 주지 않습니다.
- filter
function isBigEnough(element, index, array) { console.log(index); return (element >= 10); } var passed = [12, 5, 8, 130, 44].every(isBigEnough); // 0 // 1 // passed is false passed = [12, 54, 18, 130, 44].every(isBigEnough); // 0 1 2 3 4 // passed is true 로그인 후 복사 |
- 은 원래 배열을 변경하지 않습니다.
- forEach
function isBigEnough(element, index, array) { return (element >= 10); } var a1 = [19, 22, 6, 2, 44]; var a2 = a1.filter(isBigEnough); a1 //[19, 22, 6, 2, 44] a2 //[19, 22, 44] 로그인 후 복사 |
- 은 원래 배열에 영향을 주지 않습니다.
- indexOf
function logArrayElements(element, index, array) { console.log("a[" + index + "] = " + element); } // 注意索引2被跳过了,因为在数组的这个位置没有项 var result = [2, 5, 9].forEach(logArrayElements); // a[0] = 2 // a[1] = 5 // a[2] = 9 result //underfined 로그인 후 복사 |
- 는 원래 배열에 영향을 주지 않습니다.
-
join
var array = [1, 2, 5]; array.indexOf(5); // 2 array.indexOf(7); // -1
로그인 후 복사
- 은 원래 배열에 영향을 주지 않습니다.
- lastIndexOf
var a1 = [1, 2, 3]; var a2 = a1.join(); a1 //[1, 2, 3] a2 //"1,2,3" a2 = a1.join("");//"123" a2 = a1.join("-");//"1-2-3" 로그인 후 복사 |
- 은 원래 배열에 영향을 주지 않습니다.
-
map
map() 方法返回一个由原数组中的每个元素调用一个指定方法后的返回值组成的新数组。
map reduce 这两个函数在处理数组上一直都是一把手,带来很大的便捷性。
返回一个经过回掉函数处理的新数组;
不对原数组产生影响。
var a1 = [1, 4, 9]; var a2 = a1.map(Math.sqrt); a1 //[1, 4, 9] a2 //[1, 2, 3]
로그인 후 복사reduce
reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值。
reduce 是一个合并的过程,从左到右,直到把所有元素合并到一起,并返回最终的结果。它接受两个参数,第一个参数是一个回掉函数,第二个参数是一个初始值,表示处理第一个元素时的前一个值。这个回掉函数接受四个参数,依次是 accumulator(上次处理的结果),currentValue(当前元素的值),index(当前元素索引),array(调用 reduce 的数组)。
返回最终合并的结果,即回掉函数的输出,可以为字符串,对象,数组等任意结果;
不对原数组产生影响。
var getAdd = (pre, cur) => pre + cur; var a1 = [1, 2, 3]; var a2 = a1.reduce(getAdd, 0); a1 //[1, 2, 3] a2 //6
로그인 후 복사reduceRight
reduceRight() 方法接受一个函数作为累加器(accumulator),让每个值(从右到左,亦即从尾到头)缩减为一个值。(与 reduce() 的执行方向相反)
var toStr = (pre, cur) => '' + pre + cur; var a1 = [1, 2, 3]; var a2 = a1.reduce(toStr, ''); a2 //"123" a2 = a1.reduceRight(toStr, ''); a2 //"321"
로그인 후 복사push
push() 方法添加一个或多个元素到数组的末尾,并返回数组新的长度(length 属性值)。
如果把数组当作栈,push pop 操作是栈进和出,而往往很多人会忽略函数执行后的返回值。
返回 push 操作执行之后数组的长度;
肯定改变。
var a1 = [1, 2, 3]; var a2 = a1.push(4); a1 //[1, 2, 3, 4] a2 //4
로그인 후 복사pop
pop() 方法删除一个数组中的最后的一个元素,并且返回这个元素。
返回删除的这个元素;
肯定改变。
var a1 = [1, 2, 3]; var a2 = a1.pop(); a1 //[1, 2] a2 //3
로그인 후 복사unshift
unshift() 方法在数组的开头添加一个或者多个元素,并返回数组新的 length 值。
返回 length 值;
肯定改变。
var a1 = [1, 2, 3]; var a2 = a1.unshift(4); a1 //[4, 1, 2, 3] a2 //4
로그인 후 복사shift
shift() 方法删除数组的 第一个 元素,并返回这个元素。该方法会改变数组的长度。
shift 方法和 push 方法可以组成一个队列的操作啦。
返回删除的这个元素;
肯定改变。
reverse
reverse() 方法颠倒数组中元素的位置。第一个元素会成为最后一个,最后一个会成为第一个。
函数返回值是修改了的原数组;
原数组会修改。
var a1 = [1, 2, 3]; var a2 = a1.reverse(); a1 //[3, 2, 1] a1 === a2; //true
로그인 후 복사slice
slice() 方法会浅复制(shallow copy)数组的一部分到一个新的数组,并返回这个新数组。
slice 的参数包括拷贝的初识位置,结束位置(左闭右开),与 splice 有区别。由于不会改变原数组,这个数组可以用于前拷贝,比如经常看别人使用: arr.slice(0) ,表示拷贝数组。
返回浅拷贝后的新数组;
不会改变原数组。
var a1 = [1, 2, 3, 4, 5]; var a2 = a1.slice(1, 3); a1 //[1, 2, 3, 4, 5] a2 //[2, 3]
로그인 후 복사splice
splice() 方法用新元素替换旧元素,以此修改数组的内容。
如其名,分割,会修改原数组的内容,返回一个新数组,而且它的参数也比较多,第一个参数表示初始位置,第二个参数表示分割长度,第三个参数及以后表示分割后在分割处添加新元素。
返回分割的元素组成的数组;
会对数组进行修改,原数组会减去分割数组。
var a1 = [1, 2, 3, 4]; var a2 = a1.splice(1, 2); a1 //[1, 4] a2 //[2, 3] a1 = [1, 2, 3, 4]; a2 = a1.splice(1, 2, 5, 6); a1 //[1, 5, 6, 4]
로그인 후 복사some
some() 方法测试数组中的某些元素是否通过了指定函数的测试。
sort
sort() 方法对数组的元素做原地的排序,并返回这个数组。 sort 排序可能是不稳定的。默认按照字符串的Unicode码位点(code point)排序。
sort 函数用于排序,比较常用,若没有制定排序函数,则按照 unicode 位点进行排序,而且数字会被转成字符串,所以 ‘123’ 要排在 ‘11’ 的后面。
我们会用 sort 做一些有意思的排序,比如汉字按照拼音排序。
返回排序后的原数组;
会对数组进行修改。
var big = function(a, b){ return a - b; } var a1 = [2, 4, 77, 1]; var a2 = a1.sort(big); a1 //[1, 2, 4, 77] a1 === a2; //true
로그인 후 복사localeCompare 可以对汉字进行排序,当同时出现汉字和字母的时候会有 bug:
var sort_py = function(a, b){ return a.localeCompare(b); } var a1 = ["北京", "上海", "南京", "合肥"]; a1.sort(sort_py); //["北京", "合肥", "南京", "上海"]
로그인 후 복사toString
toString() 返回一个字符串,表示指定的数组及其元素。
显然,这个方法和 join 方法比较一下。
返回拼接的字符串;
不会改变原数组。
var a1 = [1, 2, 3]; var a2 = a1.toString(); a2 //"1,2,3"
로그인 후 복사ES6 中新添的数组方法
上面的这些方法都是 ES5 的,来看看 ES6 添加了哪些新方法。
copyWithin
copyWithin() 方法会浅拷贝数组的部分元素到同一数组的不同位置,且不改变数组的大小,返回该数组。
接受三个参数,分别是要拷贝到的位置 target,拷贝开始位置 start 和结束位置 end。
返回修改了的原数组;
会对数组进行修改,且是浅拷贝;
参数可负,负值时倒推,且 end 为空表示数组长度。
var a1 = [1, 2, 3, 4, 5]; var a2 = a1.copyWithin(0, 2, 4); a1 //[3, 4, 3, 4, 5] a2 //[3, 4, 3, 4, 5] a1 === a2; //true
로그인 후 복사find
如果数组中某个元素满足测试条件,find() 方法就会返回满足条件的第一个元素,如果没有满足条件的元素,则返回 undefined。 MDN array.find 。
返回找到的那个元素,若未找到,返回 underfined
不对原数组产生影响。
function isBigEnough(element, index, array) { return (element >= 10); } var a1 = [8, 18, 14]; var num = a1.find(isBigEnough); //18
로그인 후 복사findIndex
findIndex()方法用来查找数组中某指定元素的索引, 如果找不到指定的元素, 则返回 -1。
这个方法可以参考 find 方法,只是返回值是元素的索引而非元素本身。
fill
使用 fill() 方法,可以将一个数组中指定区间的所有元素的值, 都替换成或者说填充成为某个固定的值。
fill 方法接受三个参数,第一个参数 value 表示要填充到值,后面两个 start 和 end 表示开始和结束位置,可选,且左闭右开。
函数返回值是修改了的原数组;
可对数组产生影响。
var a1 = [1, 2, 3, 4, 5]; var a2 = a1.fill(6, 1, 4); a1 //[1, 6, 6, 6, 5] a2 //[1, 6, 6, 6, 5] a1 === a2; //true
로그인 후 복사keys
数组的 keys() 方法返回一个数组索引的迭代器。
这个方法会返回一个数组索引的迭代器,迭代器在 ES6 中有特殊的用途。
函数返回一个迭代器对象;
不会改变原数组。
var arr = ["a", "b", "c"]; var iterator = arr.keys(); console.log(iterator.next()); // { value: 0, done: false } console.log(iterator.next()); // { value: 1, done: false } console.log(iterator.next()); // { value: 2, done: false } console.log(iterator.next()); // { value: undefined, done: true }
로그인 후 복사entries
entries() 方法返回一个 Array Iterator 对象,该对象包含数组中每一个索引的键值对。
var arr = ["a", "b", "c"]; var eArr = arr.entries(); console.log(eArr.next().value); // [0, "a"] console.log(eArr.next().value); // [1, "b"] console.log(eArr.next().value); // [2, "c"]
로그인 후 복사includes
includes() 方法用来判断当前数组是否包含某指定的值,如果是,则返回 true,否则返回 false。
该函数接受两个参数,第二个参数表示开始查找位置,起始位置为 0。这个方法与 indexOf 方法最大的区别不仅在于返回值一个是索引,一个是布尔值,indexOf 方法使用的是 === 来判断,无法判断 NaN 情况,而 includes 可以判断。
返回 true 或 false;
不会改变原数组。
var a1 = [1, NaN]; a1.indexOf(NaN);//-1 a1.includes(NaN);//true
로그인 후 복사

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

동일한 ID로 배열 요소를 JavaScript의 하나의 객체로 병합하는 방법은 무엇입니까? 데이터를 처리 할 때 종종 동일한 ID를 가질 필요가 있습니다 ...

JavaScript를 배우는 것은 어렵지 않지만 어려운 일입니다. 1) 변수, 데이터 유형, 기능 등과 같은 기본 개념을 이해합니다. 2) 마스터 비동기 프로그래밍 및 이벤트 루프를 통해이를 구현하십시오. 3) DOM 운영을 사용하고 비동기 요청을 처리합니다. 4) 일반적인 실수를 피하고 디버깅 기술을 사용하십시오. 5) 성능을 최적화하고 모범 사례를 따르십시오.

이 기사에서 시차 스크롤 및 요소 애니메이션 효과 실현에 대한 토론은 Shiseido 공식 웹 사이트 (https://www.shiseido.co.jp/sb/wonderland/)와 유사하게 달성하는 방법을 살펴볼 것입니다.

Console.log 출력의 차이의 근본 원인에 대한 심층적 인 논의. 이 기사에서는 Console.log 함수의 출력 결과의 차이점을 코드에서 분석하고 그에 따른 이유를 설명합니다. � ...

프론트 엔드에서 VSCODE와 같은 패널 드래그 앤 드롭 조정 기능의 구현을 탐색하십시오. 프론트 엔드 개발에서 VSCODE와 같은 구현 방법 ...
