재미있는 트릭 :
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 :-(
경고 : 동적 평가의 부적절한 사용이 문제에 대한 이해에 따르면
값을 반복 할 때 for 루프를 사용하십시오. 그런 다음 다른 항목과 비교할 'if'. – zerkms
시간 복잡도가 N보다 작아서는 안되기 때문에 @zerkms에 동의하십시오. 각 값을 적어도 한 번 비교해야 비교할 수 있습니다. – Devesh
일부 값보다 높고 다른 값보다 낮을 수는 없으며 다른 값과 같을 수 있습니까? 또는 그것이 모두보다 높거나 낮은 지 여부를 의미합니까? 예를 들어, 원하는 출력이 높고, 낮게, 낮게, 높게, 높을 것입니까? –