Cita:
Iniciado por Panino5001 A ver si entendí bien:
Código PHP:
<script>
function tercero(arr){
return arr.sort().filter(function(el,i,ar){if(i==ar.indexOf(el))return 1;return 0})[2] || false;
}
</script>
El problema de sort es que es lexicografico por defecto, entonces [1, 2, 10] -> [1, 10, 2]. Por este motivo es necesario pasarle el callback.
Mi solución, bastante similar, aunque use reduce en lugar de filter:
Código Javascript
:
Ver originalfunction getMin(arr, pos) {
pos = pos || 0;
return arr
.reduce(function(m, c) {
if(m.indexOf(c) == -1) m.push(c);
return m;
}, [])
.sort(function(a, b) {
return a > b ? 1 : -1;
})[pos] || false;
}
var tercero = function(arr) { return getMin(arr, 2) };
function assertEquals(a, b) {
if(a !== b) console.error(
'Expected: ' + a + '. Got: ' + b
);
}
assertEquals(tercero([]), false);
assertEquals(tercero([1]), false);
assertEquals(tercero([1, 2]), false);
assertEquals(tercero([1, 2, 3]), 3);
assertEquals(tercero([1, 2, 2]), false);
assertEquals(tercero([2, 2, 2, 2, 2]), false);
assertEquals(tercero([1, 2, 2, -3]), 2);
assertEquals(tercero([1, 2, 2, -3, -3]), 2);
assertEquals(tercero([1, 2, 2, -3, -11]), 1);
assertEquals(tercero([1, 2, 2, -3, -Infinity]), 1);
assertEquals(tercero([1, 2, 2, -3, -Infinity]), 1);