나는 이것을 가지고있다:
var arr = [0, 21, 22, 7];
가장 높은 값의 인덱스를 다른 변수에 반환하는 가장 좋은 방법은 무엇입니까?
나는 이것을 가지고있다:
var arr = [0, 21, 22, 7];
가장 높은 값의 인덱스를 다른 변수에 반환하는 가장 좋은 방법은 무엇입니까?
답변:
신뢰할 수 있고 오래된 브라우저에서 작동하기 때문에 이것이 가장 좋은 방법 일 것입니다.
function indexOfMax(arr) {
if (arr.length === 0) {
return -1;
}
var max = arr[0];
var maxIndex = 0;
for (var i = 1; i < arr.length; i++) {
if (arr[i] > max) {
maxIndex = i;
max = arr[i];
}
}
return maxIndex;
}
이 하나의 라이너도 있습니다.
let i = arr.indexOf(Math.max(...arr));
그래도 필요한 것보다 두 배 많은 비교를 수행 RangeError
하고 큰 배열에서을 발생시킵니다. 나는 그 기능을 고수했다.
const max = arr.reduce((m, n) => Math.max(m, n))
의 인덱스는 [...arr.keys()].filter(i => arr[i] === max)
입니다.
[...arr.keys()]
오류를 출력합니다 :unexpected token
한 줄에 아마 더 빠를 것입니다 arr.indexOf(Math.max.apply(Math, arr))
:
var a = [0, 21, 22, 7];
var indexOfMaxValue = a.reduce((iMax, x, i, arr) => x > arr[iMax] ? i : iMax, 0);
document.write("indexOfMaxValue = " + indexOfMaxValue); // prints "indexOfMaxValue = 2"
어디:
iMax
- 최고의 인덱스 지금까지 (첫 번째 반복에서 지금까지 최대 요소의 인덱스 iMax = 0
에 두 번째 인수 때문 reduce()
이다가 0
, 우리가 두 번째 인수를 생략 할 수없는 reduce()
우리의 경우)x
-배열에서 현재 테스트 된 요소i
-현재 테스트 된 인덱스arr
-우리의 배열 ( [0, 21, 22, 7]
)reduce()
메소드 정보 (David Flanagan의 "JavaScript : The Definitive Guide"에서 제공) :
reduce ()는 두 개의 인수를 취합니다. 첫 번째는 축소 작업을 수행하는 기능입니다. 이 축소 기능의 임무는 어떻게 든 두 값을 단일 값으로 결합하거나 줄이고 그 감소 된 값을 반환하는 것입니다.
reduce ()에 사용 된 함수는 forEach () 및 map ()에 사용 된 함수와 다릅니다. 익숙한 값, 인덱스 및 배열 값이 두 번째, 세 번째 및 네 번째 인수로 전달됩니다. 첫 번째 주장은 지금까지 축소 된 누적 결과입니다. 함수에 대한 첫 번째 호출에서이 첫 번째 인수는 reduce ()에 대한 두 번째 인수로 전달한 초기 값입니다. 후속 호출에서는 이전 함수 호출에서 리턴 된 값입니다.
초기 값없이 reduce ()를 호출하면 배열의 첫 번째 요소를 초기 값으로 사용합니다. 이는 감소 함수에 대한 첫 번째 호출이 첫 번째 및 두 번째 배열 요소를 첫 번째 및 두 번째 인수로 갖게됨을 의미합니다.
arr.reduce((bestIndexSoFar, currentlyTestedValue, currentlyTestedIndex, array) => currentlyTestedValue > array[bestIndexSoFar] ? currentlyTestedIndex : bestIndexSoFar, 0);
으로 기재 될 수있다 : 만약 반복 처리는 인덱스 0 (2 파라미터)에서 시작하여 배열 currentlyTestedValue는 상기 요소의 값보다 높은 bestIndexSoFar 후 리턴 currentlyTestedIndex을 는 AS 다음 반복에 bestIndexSoFar .
this.methods.reduce((methodIndex, currentMethod, currentMethodIndex, methods) => currentMethod.price <= methods[methodIndex].price ? currentMethodIndex : methodIndex, 0)
. 구현 한 실제 예는 다음과 같습니다 ..
편집 : 몇 년 전에 나는 거칠고 너무 구체적이며 너무 복잡한 이것에 대한 대답을했습니다. 편집하고 있습니다. 나는 그들의 깔끔한 요소에 대해서는 위의 기능적 답변을 선호하지만 가독성은 좋지 않습니다. 그러나 내가 자바 스크립트에 더 익숙하다면 나도 그것을 좋아할 것입니다.
의사 코드 :
가장 큰 값을 포함하는 색인을 추적하십시오. 인덱스 0이 처음에 가장 크다고 가정하십시오. 현재 인덱스와 비교하십시오. 필요한 경우 가장 큰 값으로 색인을 업데이트하십시오.
암호:
var mountains = [3, 1, 5, 9, 4];
function largestIndex(array){
var counter = 1;
var max = 0;
for(counter; counter < array.length; counter++){
if(array[max] < array[counter]){
max = counter;
}
}
return max;
}
console.log("index with largest value is: " +largestIndex(mountains));
// index with largest value is: 3
var arr=[0,6,7,7,7];
var largest=[0];
//find the largest num;
for(var i=0;i<arr.length;i++){
var comp=(arr[i]-largest[0])>0;
if(comp){
largest =[];
largest.push(arr[i]);
}
}
alert(largest )//7
//find the index of 'arr'
var arrIndex=[];
for(var i=0;i<arr.length;i++){
var comp=arr[i]-largest[0]==0;
if(comp){
arrIndex.push(i);
}
}
alert(arrIndex);//[2,3,4]
단순한
maxarr: function(){
let maxval = 0;
let maxindex = null;
for (i = 0; i < arr.length; i++){
if (arr[i] > maxval) {
maxval = arr[i];
maxindex = i;
}
}
}