JavaScript 배열에 포함된 최대 수를 찾으려면 어떻게 해야 합니까?
간단한 JavaScript Array 객체에 몇 개의 숫자가 포함되어 있습니다.
[267, 306, 108]
이 배열에서 가장 많은 수를 찾을 수 있는 함수가 있습니까?
Array.max = function( array ){
return Math.max.apply( Math, array );
};
경고: 일부 VM에서는 최대 인수 수가 65535개까지 적기 때문에 어레이가 그렇게 작은지 확실하지 않으면 for 루프를 사용하십시오.
적용 함수를 사용하여 Math.max를 호출할 수 있습니다.
var array = [267, 306, 108];
var largest = Math.max.apply(Math, array); // 306
어떻게 작동합니까?
apply 함수는 지정된 컨텍스트와 인수를 사용하여 배열로 제공되는 다른 함수를 호출하기 위해 사용됩니다.min 및 max 함수는 임의의 수의 입력 인수를 사용할 수 있습니다.Math.max(val1, val2, ..., valN)
전화하면:
Math.min.apply(Math, [1, 2, 3, 4]);
적용 함수는 다음과 같이 실행됩니다.
Math.min(1, 2, 3, 4);
이러한 기능은 스태틱하므로 첫 번째 파라미터인 컨텍스트는 중요하지 않습니다.이들은 컨텍스트로 전달되는 내용에 관계없이 작동합니다.
새로운 확산 연산자를 사용하여 가장 쉬운 구문:
var arr = [1, 2, 3];
var max = Math.max(...arr);
저는 JavaScript 전문가는 아니지만, 이 방법들이 어떻게 합치는지 보고 싶었기 때문에, 이것은 저에게 좋은 연습이었습니다.이것이 기술적으로 퍼포먼스 테스트의 올바른 방법인지는 모르겠지만, 코드에서 알 수 있듯이 바로 실행했습니다.
0번째 값을 정렬하고 가져오는 방법은 단연코 최악의 방법입니다(또한 어레이 순서를 변경하는 것이 바람직하지 않을 수도 있습니다.다른 경우에는 수백만 개의 지수를 말하지 않는 한 그 차이는 무시할 수 있습니다.
랜덤 번호의 100,000 인덱스 배열에서 다섯 번의 런의 평균 결과:
- reduce를 실행하는 데 4.0392ms가 소요됨
- Math.max.apply를 실행하는 데 3.3742ms가 소요되었습니다.
- 0번째 값을 정렬하고 가져오는 데 67.4724ms가 소요되었습니다.
- reduce() 내의 Math.max를 실행하는 데 6.5804 ms가 소요되었습니다.
- 커스텀 findmax 함수를 실행하는 데 1.6102ms가 걸렸습니다.
var performance = window.performance
function findmax(array)
{
var max = 0,
a = array.length,
counter
for (counter=0; counter<a; counter++)
{
if (array[counter] > max)
{
max = array[counter]
}
}
return max
}
function findBiggestNumber(num) {
var counts = []
var i
for (i = 0; i < num; i++) {
counts.push(Math.random())
}
var a, b
a = performance.now()
var biggest = counts.reduce(function(highest, count) {
return highest > count ? highest : count
}, 0)
b = performance.now()
console.log('reduce took ' + (b - a) + ' ms to run')
a = performance.now()
var biggest2 = Math.max.apply(Math, counts)
b = performance.now()
console.log('Math.max.apply took ' + (b - a) + ' ms to run')
a = performance.now()
var biggest3 = counts.sort(function(a,b) {return b-a;})[0]
b = performance.now()
console.log('sorting and getting the 0th value took ' + (b - a) + ' ms to run')
a = performance.now()
var biggest4 = counts.reduce(function(highest, count) {
return Math.max(highest, count)
}, 0)
b = performance.now()
console.log('Math.max within reduce() took ' + (b - a) + ' ms to run')
a = performance.now()
var biggest5 = findmax(counts)
b = performance.now()
console.log('custom findmax function took ' + (b - a) + ' ms to run')
console.log(biggest + '-' + biggest2 + '-' + biggest3 + '-' + biggest4 + '-' + biggest5)
}
findBiggestNumber(1E5)
대규모 어레이(최대 10만 요소)의 경우 실제로는 어레이를 단순히 반복하는 것이 효과적이라는 것을 알게 되었습니다.for
루프, 퍼포먼스 최대 30% 향상Math.max.apply()
:
function mymax(a)
{
var m = -Infinity, i = 0, n = a.length;
for (; i != n; ++i) {
if (a[i] > m) {
m = a[i];
}
}
return m;
}
어레이를 내림차순으로 정렬하여 첫 번째 항목을 가져올 수 있습니다.
[267, 306, 108].sort(function(a,b){return b-a;})[0]
용도:
var arr = [1, 2, 3, 4];
var largest = arr.reduce(function(x,y) {
return (x > y) ? x : y;
});
console.log(largest);
Array.reduce 사용:
[0,1,2,3,4].reduce(function(previousValue, currentValue){
return Math.max(previousValue,currentValue);
});
어레이에서 가장 큰 수를 찾으려면 사용만 하면 됩니다.Math.max(...arrayName);
. 다음과 같이 동작합니다.
let myArr = [1, 2, 3, 4, 5, 6];
console.log(Math.max(...myArr));
자세한 것은, 「 」의 한 것에 는, 을 해 주세요.Math.max
: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
const inputArray = [ 1, 3, 4, 9, 16, 2, 20, 18];
const maxNumber = Math.max(...inputArray);
console.log(maxNumber);
및을 찾는 인 방법입니다max min min 。보다 훨씬 코드입니다.Math.max.apply
1000만 명
function findmax(array)
{
var max = 0;
var a = array.length;
for (counter=0;counter<a;counter++)
{
if (array[counter] > max)
{
max = array[counter];
}
}
return max;
}
function findmin(array)
{
var min = array[0];
var a = array.length;
for (counter=0;counter<a;counter++)
{
if (array[counter] < min)
{
min = array[counter];
}
}
return min;
}
심플 원 라이너
[].sort().pop()
이 '아예'를 사용하고 있습니다.Math.max.apply()
멋지고 멋있는데 한계가 있어요.
함수 인수는 단점인 제한이 있는 스택에 배치됩니다.하게 됩니다.RangeError: Maximum call stack size exceeded.
콜 스택사이즈를 알아내기 위해 다음 코드를 사용했습니다.
var ar = [];
for (var i = 1; i < 100*99999; i++) {
ar.push(1);
try {
var max = Math.max.apply(Math, ar);
} catch(e) {
console.log('Limit reached: '+i+' error is: '+e);
break;
}
}
파이어폭스에서 591519로 가장 큰 것으로 판명되었습니다.즉, 어레이에 591519개 이상의 항목이 포함되어 있는 경우,Math.max.apply()
RangeError가 발생합니다.
이 문제에 대한 최선의 해결책은 반복적인 방법입니다(credit: https://developer.mozilla.org/):
max = -Infinity, min = +Infinity;
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] > max)
max = numbers[i];
if (numbers[i] < min)
min = numbers[i];
}
이 질문에 대한 글을 블로그에 올렸습니다.
물론 .Math.max.apply(null,[23,45,67,-45])
그 됩니다.67
.
은 can장으로 할 수 마세요Function.prototype.bind
모든 기능을 제공합니다.
var aMax = Math.max.apply.bind(Math.max, Math);
aMax([1, 2, 3, 4, 5]); // 5
'연장하다'도 할 수 요.Array
이 기능을 가지고 모든 배열에 포함시킬 수 있습니다.
Array.prototype.max = function(){return Math.max.apply( Math, this )};
myArray = [1,2,3];
console.log( myArray.max() );
다음 각 항목에 사용할 수도 있습니다.
var maximum = Number.MIN_SAFE_INTEGER;
var array = [-3, -2, 217, 9, -8, 46];
array.forEach(function(value){
if(value > maximum) {
maximum = value;
}
});
console.log(maximum); // 217
- 사방법 -Array.prototype.reduce()
★★★★★★★★★★★★★★★★★★!
[267, 306, 108].reduce((acc,val)=> (acc>val)?acc:val)
여기서 acc = 축전지 및 val = 전류 값.
var a = [267, 306, 108].reduce((acc,val)=> (acc>val)?acc:val);
console.log(a);
3진 연산자를 사용하여 수행하는 방법에 대한 재귀적 접근법
const findMax = (arr, max, i) => arr.length === i ? max :
findMax(arr, arr[i] > max ? arr[i] : max, ++i)
const arr = [5, 34, 2, 1, 6, 7, 9, 3];
const max = findMax(arr, arr[0], 0)
console.log(max);
이거 드셔보세요.
var arr = [267, 306, 108];
var largestNum = 0;
for(i=0; i<arr.length; i++) {
if(arr[i] > largest){
var largest = arr[i];
}
}
console.log(largest);
방금 JavaScript로 시작했는데, 이 방법이 좋을 것 같습니다.
var array = [34, 23, 57, 983, 198];
var score = 0;
for(var i = 0; i = array.length; i++) {
if(array[ i ] > score) {
score = array[i];
}
}
var nums = [1,4,5,3,1,4,7,8,6,2,1,4];
nums.sort();
nums.reverse();
alert(nums[0]);
가장 간단한 방법:
var nums = [1,4,5,3,1,4,7,8,6,2,1,4]; nums.sort(); nums.reverse(); alert(nums[0]);
다음을 수행합니다.
Array.prototype.max = function(){
return Math.max.apply( Math, this );
};
, 이제 시험해 보세요.[3,10,2].max()
10
버블 정렬을 사용하여 최대값과 최소값 찾기
var arr = [267, 306, 108];
for(i=0, k=0; i<arr.length; i++) {
for(j=0; j<i; j++) {
if(arr[i]>arr[j]) {
k = arr[i];
arr[i] = arr[j];
arr[j] = k;
}
}
}
console.log('largest Number: '+ arr[0]);
console.log('Smallest Number: '+ arr[arr.length-1]);
이거 드셔보세요
function largestNum(arr) {
var currentLongest = arr[0]
for (var i=0; i< arr.length; i++){
if (arr[i] > currentLongest){
currentLongest = arr[i]
}
}
return currentLongest
}
@Quasimondo의 코멘트에 따르면, https://jsperf.com/finding-maximum-element-in-an-array은 다음과 같이 최고의 퍼포먼스를 발휘하고 있는 것 같습니다.문제의 어레이는 퍼포먼스에 큰 영향을 주지 않을 수 있습니다.대형 어레이의 퍼포먼스가 더욱 중요해지고 있습니다.또, 다음과 같이,Math.max()
어레이 길이가 65535를 넘으면 동작하지 않습니다.이 답변도 참조해 주세요.
function largestNum(arr) {
var d = data;
var m = d[d.length - 1];
for (var i = d.length - 1; --i > -1;) {
if (d[i] > m) m = d[i];
}
return m;
}
, 하나.for/of
「이것들」은 다음과 같습니다.
const numbers = [2, 4, 6, 8, 80, 56, 10];
const findMax = (...numbers) => {
let currentMax = numbers[0]; // 2
for (const number of numbers) {
if (number > currentMax) {
console.log(number, currentMax);
currentMax = number;
}
}
console.log('Largest ', currentMax);
return currentMax;
};
findMax(...numbers);
다차원 배열에서 가장 큰 숫자 찾기
var max = [];
for(var i=0; arr.length>i; i++ ) {
var arra = arr[i];
var largest = Math.max.apply(Math, arra);
max.push(largest);
}
return max;
어레이에서 가장 많은 수를 반환하는 솔루션.
const largestOfFour = arr => {
let arr2 = [];
arr.map(e => {
let numStart = -Infinity;
e.forEach(num => {
if (num > numStart) {
numStart = num;
}
})
arr2.push(numStart);
})
return arr2;
}
매우 간단해야 합니다.
var countArray = [1,2,3,4,5,1,3,51,35,1,357,2,34,1,3,5,6];
var highestCount = 0;
for(var i=0; i<=countArray.length; i++){
if(countArray[i]>=highestCount){
highestCount = countArray[i]
}
}
console.log("Highest Count is " + highestCount);
언급URL : https://stackoverflow.com/questions/1379553/how-might-i-find-the-largest-number-contained-in-a-javascript-array
'programing' 카테고리의 다른 글
효율적인 정수 비교 기능 (0) | 2022.09.08 |
---|---|
pycurl 설치 시 "curl-config를 실행할 수 없습니다: [Errno 2] 해당 파일 또는 디렉토리가 없습니다" (0) | 2022.09.08 |
슬롯 분할 문제를 사용하는 요소 UI 테이블 열 "정의되지 않은 속성 'column_name'을 읽을 수 없습니다" (0) | 2022.09.08 |
Laravel 블레이드가 @include를 통해 문자열과 함께 변수를 전달하면 오류가 발생합니다. (0) | 2022.09.08 |
문자열 끝에서 서브스트링을 제거하려면 어떻게 해야 하나요? (0) | 2022.09.08 |