자바 스 크 립 트 면접 기법 의 배열 중 일부 로 우 동작
본 고 는 주로 응용 에서 배열 api 의 일부 소란 조작 을 말한다.
예 를 들 어 한 줄 의 코드 가 평면 화 된 n 차원 배열,배열 의 무 게 를 제거 하고 배열 의 최대 치,배열 의 구 화,정렬,대상 과 배열 의 전환 등;
위의 이 응용 장면 들 을 당신 은 한 줄 의 코드 로 실현 할 수 있 습 니까?
1.평면 화 n 차원 배열
1.궁극 편
[1,[2,3]].flat(2) //[1,2,3]
[1,[2,3,[4,5]].flat(3) //[1,2,3,4,5]
[1,[2,3,[4,5]]].toString() //'1,2,3,4,5'
[1[2,3,[4,5[...]].flat(Infinity) //[1,2,3,4...n]
Array.flat(n)
는 ES 10 평면 배열 의 api 로 n 은 차원 을 나타 내 고 n 값 이 Infinity 일 때 차원 은 무한대 이다.2.시작 편
function flatten(arr) {
while(arr.some(item=>Array.isArray(item))) {
arr = [].concat(...arr);
}
return arr;
}
flatten([1,[2,3]]) //[1,2,3]
flatten([1,[2,3,[4,5]]) //[1,2,3,4,5]
실질 적 으로 재 귀 와 배열 의 합병 방법 인 concat 를 이용 하여 평면 을 실현 하 는 것 이다.2.무 거 운 것 을 제거한다
1.궁극 편
Array.from(new Set([1,2,3,3,4,4])) //[1,2,3,4]
[...new Set([1,2,3,3,4,4])] //[1,2,3,4]
set 는 ES6 에서 새로 나 온 중복 되 지 않 는 배열 의 데이터 형식 입 니 다.Array.from
클래스 를 배열 로 바 꾸 는 것 이다.set 의 값 을 문자열 로 변환 하 는 확장 연산 자
2.시작 편
Array.prototype.distinct = function(){
var arr = this,
result = [],
i,
j,
len = arr.length;
for(i = 0; i < len; i++){
for(j = i + 1; j < len; j++){
if(arr[i] === arr[j]){
j = ++i;
}
}
result.push(arr[i]);
}
return result;
}
[1,2,3,3,4,4].distinct(); //[1,2,3,4]
새 배열 의 저장 값 을 취하 고 두 배열 의 값 을 순환 하여 비교 합 니 다.3.정렬
1.궁극 편
[1,2,3,4].sort((a, b) => a - b); // [1, 2,3,4],
[1,2,3,4].sort((a, b) => b - a); // [4,3,2,1]
sort 는 js 내 장 된 정렬 방법 으로 매개 변 수 는 함수 입 니 다.2.시작 편
거품 정렬:
Array.prototype.bubleSort=function () {
let arr=this,
len = arr.length;
for (let outer = len; outer >= 2; outer--) {
for (let inner = 0; inner <= outer - 1; inner++) {
if (arr[inner] > arr[inner + 1]) {
//
[arr[inner], arr[inner + 1]] = [arr[inner + 1], arr[inner]];
console.log([arr[inner], arr[inner + 1]]);
}
}
}
return arr;
}
[1,2,3,4].bubleSort() //[1,2,3,4]
정렬 선택
Array.prototype.selectSort=function () {
let arr=this,
len = arr.length;
for (let i = 0, len = arr.length; i < len; i++) {
for (let j = i, len = arr.length; j < len; j++) {
if (arr[i] > arr[j]) {
[arr[i], arr[j]] = [arr[j], arr[i]];
}
}
}
return arr;
}
[1,2,3,4].selectSort() //[1,2,3,4]
4.최대 치1.궁극 편
Math.max(...[1,2,3,4]) //4
Math.max.apply(this,[1,2,3,4]) //4
[1,2,3,4].reduce( (prev, cur,curIndex,arr)=> {
return Math.max(prev,cur);
},0) //4
Math.max()
Math 대상 이 내 장 된 방법 으로 매개 변 수 는 문자열 입 니 다.reduce 는 ES5 의 배열 api 로 매개 변 수 는 함수 와 기본 초기 값 이 있 습 니 다.
함수 에는 네 개의 인자 가 있 습 니 다.pre(지난번 반환 값),cur(현재 값),curIndex(현재 값 색인),arr(현재 배열).
2.시작 편
우선 정렬 한 다음 값 을 취한 다.
5.화 해 를 구하 다
1.궁극 편
[1,2,3,4].arr.reduce(function (prev, cur) {
return prev + cur;
},0) //10
2.시작 편
function sum(arr) {
var len = arr.length;
if(len == 0){
return 0;
} else if (len == 1){
return arr[0];
} else {
return arr[0] + sum(arr.slice(1));
}
}
sum([1,2,3,4]) //10
slice 를 이용 하여 배열 을 바 꾸 고 재 귀 구 화 를 이용 합 니 다.6.합병
1.궁극 편
[1,2,3,4].concat([5,6]) //[1,2,3,4,5,6]
[...[1,2,3,4],...[4,5]] //[1,2,3,4,5,6]
[1,2,3,4].push.apply([1,2,3,4],[5,6]) //[1,2,3,4,5,6]
2.시작 편
let arr=[1,2,3,4];
[5,6].map(item=>{
arr.push(item)
}) //arr [1,2,3,4,5,6], return ,return [5,6]
7.포함 치 판단1.궁극 편
[1,2,3].includes(4) //false
[1,2,3].indexOf(4) //-1
[1, 2, 3].find((item)=>item===3)) //3 undefined
[1, 2, 3].findIndex((item)=>item===3)) //2 -1
includes(),find(),findIndex()는 ES6 api 입 니 다.2.시작 편
[1,2,3].some(item=>{
return item===3
}) //true false
8.클래스 배열 전환1.궁극 편
Array.prototype.slice.call(arguments) //arguments ( )
Array.prototype.slice.apply(arguments)
Array.from(arguments)
[...arguments]
클래스 배열:length 속성 이 있 지만 배열 방법 이 없습니다.call,apply:slice 에 있 는 this 지향 arguments 를 바 꾸 는 것 이기 때문에 arguments 도 배열 을 호출 할 수 있 는 방법 입 니 다.
Array.from 은 유사 한 배열 이나 교체 가능 한 대상 을 배열 로 만 듭 니 다.
클래스 배열 을 문자열 로 확장 하고 배열 로 정의 합 니 다.
2.시작 편
Array.prototype.slice = function(start,end){
var result = new Array();
start = start || 0;
end = end || this.length; //this , call , this , ,
for(var i = start; i < end; i++){
result.push(this[i]);
}
return result;
}
9.각 설정 값1.궁극 편
[1,2,3].fill(false) //[false,false,false]
fill 은 ES6 의 방법 입 니 다.2.시작 편
[1,2,3].map(() => 0)
10.모든 항목 이 만족 하 는 지 여부
[1,2,3].every(item=>{return item>2}) //false
every 는 ES5 api 입 니 다.모든 만족 은 true 로 돌아 갑 니 다.11.만족
[1,2,3].some(item=>{return item>2}) //true
some 는 ES5 api 입 니 다.만족 하 는 반환 true12.필터 배열
[1,2,3].filter(item=>{return item>2}) //[3]
filter 는 ES5 api 로 추 가 된 항목 을 만족 시 키 는 배열 을 되 돌려 줍 니 다.13.대상 과 배열 전환
Object.keys({name:' ',age:14}) //['name','age']
Object.values({name:' ',age:14}) //[' ',14]
Object.entries({name:' ',age:14}) //[[name,' '],[age,14]]
Object.fromEntries([name,' '],[age,14]) //ES10 api,Chrome , firebox {name:' ',age:14}
총결산이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.