JS 에서 2 차원 배열 의 최대 치 를 취 하 는 방법 을 모 았 습 니 다.

6068 단어
자 바스 크 립 트 에 서 는 내 장 된 Math. max () 의 최대 값 을 사용 할 수 있 지만, 다 중 배열 에서 최대 값 을 꺼 내 는 데 는 어려움 이 있 습 니 다.
문제 설명
만약 당신 이 하나의 배열 을 가지 고 있다 고 가정 하고, 이 배열 에는 숫자의 하위 배열 이 포함 되 어 있 으 며, 우리 가 해 야 할 일 은 배열 의 모든 하위 배열 에서 가장 큰 숫자 를 되 돌려 주 는 것 입 니 다.
기본 해결 방안

function largestOfFour(arr) {
var results = []; //     results     
//         ,      
for (var n = 0; n < arr.length; n++) {
var largestNumber = 0; //        ,      
//        ,     
for (var sb = 0; sb < arr[n].length; sb++) {
//                    
if (arr[n][sb] > largestNumber) {
//     ,         largestNumber
largestNumber = arr[n][sb];
}
}
//      ,              results 
results[n] = largestNumber;
}
//     
return results;
}
largestOfFour([[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]); //[34, 456, 4567, 78]

위의 방법 은 일반적인 해결 방안 입 니 다. 두 개의 for 순환 을 통 해 배열 과 하위 배열 을 옮 겨 다 니 는 것 입 니 다.
모든 하위 배열 에서 옮 겨 다 니 는 최대 값 을 저장 하기 위해 results 변 수 를 만 듭 니 다.
외부 배열 을 옮 겨 다 니 기 위 한 외부 순환 생 성
최대 값 을 저장 하기 위해 두 번 째 변 수 를 만 듭 니 다.이 변 수 는 내부 for 순환 의 밖 에 두 어야 합 니 다. 그래 야 재배 치 되 지 않 습 니 다.
하위 배열 의 모든 요 소 를 옮 겨 다 니 는 두 번 째 for 순환 을 만 듭 니 다.
현재 하위 배열 의 요소 가 현재 저 장 된 최대 값 largestNumber 보다 큰 지 if 문 구 를 통 해 판단 합 니 다.(true) 라면, 이 최대 값 을 largestNumber 에 저장 합 니 다.
내부 순환 이 끝 난 후 각 하위 배열 의 최대 값 을 최초 로 설명 한 변수 results 에 저장 합 니 다.
마지막 으로 results 배열 되 돌려 주기
모든 하위 배열 의 최대 값 을 꺼 낸 후 새 배열 results 를 얻 을 수 있 습 니 다. 이 때 는 통 하기 만 하면 됩 니 다.

Array.prototype.max = function () {
return Math.max.apply({},this);
}
largestOfFour(arr).max();

그 중 최대 치 를 얻 을 수 있 습 니 다.

largestOfFour([[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]).max(); // 4567

중급 솔 루 션

function largestOfFour (arr) {
//   map()  ,       ,             ,      
return arr.map(function (group) {
//   reduce  ,             group   
return group.reduce(function (prev, current) {
//   current   prev,  current,    prev
return (current > prev) ? current : prev;
});
});
}
largestOfFour([[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]); // [34, 456, 4567, 78]

외부 배열 에서 Array. prototype. map () 방법 으로 배열 을 옮 겨 다 닙 니 다.map () 방법 으로 배열 을 옮 겨 다 니 면 리 셋 함 수 를 호출 합 니 다. 이 리 셋 함수 에서 reduce () 방법 으로 모든 하위 배열 group 을 합 쳐 새 배열 로 값 을 되 돌려 줍 니 다.그리고 reduce () 방법 을 사용 할 때 똑 같이 리 셋 함 수 를 호출 합 니 다. 이 리 셋 함 수 는 한 가지 일 만 했 습 니 다. 바로 하위 배열 의 요 소 를 비교 하 는 것 입 니 다. current 가 prev 보다 크 면 current 로 돌아 갑 니 다. 그렇지 않 으 면 prev 로 돌아 가 모든 하위 배열 의 최대 치 를 얻 을 수 있 습 니 다.
앞 과 마찬가지 로 Math. max. apply () 를 통 해 최대 치 를 얻 을 수 있 습 니 다.
최 적 해결 방안

function largestOfFour (arr) {
return arr.map(Function.apply.bind(Math.max, null));
}
largestOfFour([[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]]); //[34, 456, 4567, 78]

이 방안 은 Math. max 방법 과 유사 하지만 Function. prototype. apply 기능 을 사용 하여 배열 을 매개 변수 로 합 니 다.
먼저 주 배열 의 모든 요 소 를 옮 겨 다 니 는 것, 즉 배열 내부 의 모든 하위 배열 이다.
map () 방법 을 사용 하려 면 내부 각 배열 의 최대 치 를 찾 을 수 있 는 반전 함수 가 필요 합 니 다.Math. max 가 입력 한 배열 작업 을 받 아들 일 수 있 도록 함 수 를 만들어 야 합 니 다.다시 말 하면 이것 은 매우 간단 하고 이렇게 일 하 는 것 도 매우 좋다. 예 를 들 어 Math. max ([9, 43, 20, 6]).최대 치 43 을 되 돌려 줍 니 다.
Function. prototype. apply 방법 은 배열 을 매개 변수 로 받 아들 일 수 있 지만 함수 가 문맥 을 호출 하면 복잡 합 니 다.예 를 들 어 Math. max. apply (null, [9, 43, 20, 6]) 는 Max. max 방법 을 호출 하지만 이런 방법 은 찾기 가 쉽 지 않다.
여기 서 Function. prototype. apply 방법 에 null 인 자 를 전달 하여 Math. max 에 문맥 이 필요 하지 않다 고 알려 줍 니 다.
arr. map () 는 표현 식 뿐만 아니 라 반전 함수 가 필요 하기 때문에 함수. bid 방법 에서 함 수 를 제공 합 니 다.
Function. prototype. apply 는 정적 인 방법 이기 때문에 함수 대상 과 유사 합 니 다. 우 리 는 Function. prototype. apply 에 Function. prototype. bind 를 연결 했다 고 할 수 있 습 니 다.예: Function. application. bind
이 예제 에서 Math. max 방법 과 같은 Function. prototype. apply. bid 리 셋 함 수 를 통 해 컨 텍스트 를 지정 할 수 있 습 니 다.
Function. prototype. apply 방법 에 삽입 되 어 있 기 때문에 상하 문 을 첫 번 째 매개 변수 로 해 야 하 며, 이 상하 문 은 허위 입 니 다.
그래서 우 리 는 null 을 두 번 째 매개 변수 로 Function. prototype. apply. bind 에 전달 하고 문맥 을 연결 합 니 다. 이 문맥 은 바로 Math. max 방법 입 니 다.
Math. max 는 모든 컨 텍스트 에 독립 되 어 있 기 때문에 Function. prototype. apply 방법 으로 호출 된 허위 컨 텍스트 를 무시 합 니 다.
우 리 는 Function. prototype. apply. bid (Math. max, null) 를 사용 하여 새 함수 에 arr. map 값 을 받 아들 입 니 다. 예 를 들 어 배열 의 하위 배열 등 입 니 다.
다 차원 배열 에서 최대 값 을 가 져 옵 니 다.
위 에서 서로 다른 방법 으로 2 차원 배열 에서 하위 배열 의 최대 치 를 추출 하고 이 최대 치 를 새로운 배열 로 재 구성 합 니 다. 연장 하면 안의 최대 치 를 추출 할 때 Array. prototype. max 함 수 를 사용 해 야 합 니 다. 함수 에서 Math. max. apply ({}, this) 를 통 해 최대 치 를 얻 을 수 있 습 니 다.그러나 2 차원 배열 이 아니라면 이 방법 은 배열 에서 가장 큰 값 을 꺼 낼 수 없다.
다 차원 배열 에서 최대 치 를 취하 면 join () 과 split () 방법 으로 조합 할 수 있 습 니 다.

function largestOfFour (arr) {
var newArray = arr.join(",").split(",");
return Math.max.apply({},newArray);
}
largestOfFour([12,23]); // =>23
largestOfFour([12,23,[1234,324],[345,566]]); // =>1234
largestOfFour([12,23,[1234,324,[23121,90890]],[345,566,[345,78,90]]]); // =>90890
largestOfFour([12,23,[1234,324,[23121,90890]],[345,566,[345,78,90,[90909090,988]]]]); // =>90909090

마찬가지 로 비슷 한 방법 으로 다 차원 배열 의 최소 값 을 추출 할 수 있 습 니 다.

function smallerOfFour (arr) {
var newArray = arr.join(",").split(",");
return Math.min.apply({},newArray);
}
smallerOfFour([12,23]); // =>12
smallerOfFour([112,23,[1234,324],[345,566]]); // =>23
smallerOfFour([212,123,[1234,324,[23121,90890]],[345,566,[345,78,90]]]); // =>78
smallerOfFour([102,230,[1234,324,[23121,90890]],[345,566,[345,78,90,[90909090,988]]]]); // =>78

총결산
자바 스 크 립 트 학습 노트: 배열 의 최대 값 과 최소 값 을 가 져 옵 니 다.이 글 은 2 차원 배열 에서 가장 큰 수 를 어떻게 꺼 내 는 지 서로 다른 측면 에서 소 개 했 지만 배열 에는 다 차원 배열 이 있 을 때 가 많 았 다. 글 은 마지막 으로 다 차원 배열 에서 최대 치 를 어떻게 꺼 내 는 지 소개 했다.더 많은 방안 이 있다 면 댓 글 에서 우리 와 함께 공유 하 는 것 을 환영 합 니 다.

좋은 웹페이지 즐겨찾기