2016-11-06 4 views
1

배열의 첫 번째 값이 다른 값보다 높거나 낮은지 비교하는 데 권장되는 방법은 무엇입니까?배열의 첫 번째 값을 다른 배열과 비교

난 [114,34,0,2, 8,3]

VAR의 a는 다음과 같이 배열을

I 비교하려는 경우 값이 [0]는 더 높거나보다 낮은 js를 통해 다른 배열 값. EDIT : 예상되는 var 결과 : 배열에 8보다 높은 값이 있으므로 8이 더 작습니다.

예 2 : VAR B는 = [34, 2, 23, 8 예상 출력 모든 다른 숫자 보낸 이상은 [0]

+4

값을 반복 할 때 for 루프를 사용하십시오. 그런 다음 다른 항목과 비교할 'if'. – zerkms

+0

시간 복잡도가 N보다 작아서는 안되기 때문에 @zerkms에 동의하십시오. 각 값을 적어도 한 번 비교해야 비교할 수 있습니다. – Devesh

+1

일부 값보다 높고 다른 값보다 낮을 수는 없으며 다른 값과 같을 수 있습니까? 또는 그것이 모두보다 높거나 낮은 지 여부를 의미합니까? 예를 들어, 원하는 출력이 높고, 낮게, 낮게, 높게, 높을 것입니까? –

답변

1

최선의 방법보다 낮은 1에서 시작하는 forloop 것이다.

for(i = 1; i < a.length;i++){ 
    if(a[0] > a[i]) 
    { 
     //do something 
    } 
    else if(a[0] < a[i]) 
    { 
     //do something 
    } 
} 
+0

@DawnPatrol 만약 그가 당신의 충고를 따르면 그는 존재하지 않는 배열 요소, 즉 a [a.length]에 접근하려 할 것입니다. 이 솔루션에는 문제가 없습니다. 첫 번째 요소를 자체 요소와 비교할 필요가 없기 때문에 i = 1부터 시작합니다. –

+0

좋은 지적, 코멘트가 삭제되었습니다. – DawnPatrol

2

당신은 당신이 엄격한 전자에 대해 다음

var min = Math.min.apply(null, a); 
    var max = Math.max.apply(null, a); 
1

테스트 등의 최소 및 최대 함수를 호출 할 수있는 모든 다른 값 이외의 모든 다른 값보다 높거나 낮은 경우 알고 싶은 경우 품질뿐만 아니라 ...

var a = [8,3, 114,34,0,2]; 

a.forEach(function(element) { 
    element === a[0] ? console.log (element + ' is equal to ' + a[0]) : 
    element > a[0] ? console.log(element + ' is higher than ' + a[0]) : 
    console.log(element + " is lower than " + a[0]); 
}); 

//"8 is equal to 8" 
//"3 is lower than 8" 
//"114 is higher than 8" 
//"34 is higher than 8" 
//"0 is lower than 8" 
//"2 is lower than 8" 
0

// Create an array of -1/0/+1 for each value relative to first elt. 
 
const comps = ([head, ...tail]) => tail.map(e => e < head ? -1 : e === head ? 0 : +1); 
 

 
// Define some little convenience routines. 
 
const greater = c => c === +1; 
 
const less = c => c === -1; 
 

 
// See if some or all element(s) are greater or less. 
 
const someGreater = a => comps(a).some(greater); 
 
const someLess = a => comps(a).some(less); 
 
const allGreater = a => comps(a).every(greater); 
 
const allLess  = a => comps(a).every(less); 
 

 
// Test. 
 
const input = [8,3, 114,34,0,2]; 
 

 
console.log("Some are greater", someGreater(input)); 
 
console.log("Some are less", someLess(input)); 
 
console.log("All are greater", allGreater(input)); 
 
console.log("All are less", allLess(input));

0

재미있는 트릭 :

function first_is_bigger (array) { 
    var comp = array.join(" && " + array[0] + " > "); 
    return Function("return 1 | " + comp + ";")(); 
} 
first_is_bigger([0, 1, 2]) // false 
first_is_bigger([0, -1, -2]) // true 

설명 :

,
array = [1, 2, 3]; 
comp = array.join(" && " + array[0] + " > "); 
// comp = "1 && 1 > 2 && 1 > 3" 
exec_comp = Function("return " + comp + ";"); 
// exec_comp = function() { return 1 && 1 > 2 && 1 > 3; } 
exec_comp() 
// false 

문제 : 0 && anything 항상 false입니다 :

exec_comp = Function("return 1 | " + comp + ";"); 
// exec_comp = function() { return 1 | 0 && 0 > -1 && 0 > -2; } 
exec_comp() 
// true :-) 
: 1 | anything 항상 다른 0보다 : 수정이

array = [0, -1, -2] 
comp = array.join(" && " + array[0] + " > "); 
// comp = "0 && 0 > -1 && 0 > -2" 
exec_comp = Function("return " + comp + ";"); 
// exec_comp = function() { return 0 && 0 > -1 && 0 > -2; } 
exec_comp() 
// false :-(

경고 : 동적 평가의 부적절한 사용이 문제에 대한 이해에 따르면

0

:-(주입 공격에 대한 코드를 열어, 우리는 주어진 요소가 배열의 최대 값이 있는지 여부를 확인하고자 (우리의 특별한 경우에 첫번째 것). 좀 더 일반적인 function을 구현했습니다. 여기서 어떤 요소에 대해서도 확인할 수 있지만, index 0이 기본값입니다.

function isHigher(input, index) { 
    if (index === undefined) { 
     index = 0; 
    } 
    for (var i in input) { 
     if ((i !== index) && (input[i] > input[index])) { 
      return false; 
     } 
    } 
    return true; 
} 

0 번째 요소가 가장 큰지 확인하려면 isHigher(a)으로 전화하십시오.다섯 번째 요소에 대해 이것을 확인하려면 isHigher(a, 5)을 호출하십시오.

관련 문제