Tengo una matriz de cuatro objetos JS:
Object1 = { fee: 150 } Object2 = { fee: 300 } Object3 = { fee: 450 } Object4 = { fee: 700 }Necesito encontrar un objeto donde el valor que proporcione a través de la entrada sea mayor que la tarifa del objeto pero también menor que la tarifa del siguiente. También hay un caso en el que el valor no puede ser menor que la tarifa del primero y si el valor es mayor que la tarifa de cuatro, necesito cuatro como resultado.
Por ejemplo:
value = 50 , result = null ,
value = 225 , result = Object1 ,
value = 400 , result = Object2 ,
value = 650 , result = Object3 ,
value = 1500 , result = Object4 ,
¿Quieres decir algo como esto?
let obs = [{fee: 150}, {fee: 300}, {fee: 450}, {fee: 700}]; function findObject(currentFee) { // in case it is not garanteed that obs is sorted, doing this // would be necessary beforehand return obs.filter(o => o.fee > currentFee)[0] };Esto es lo que estabas buscando?
var objects = [{fee: 150}, {fee: 300}, {fee: 450}, {fee: 700}]; function find(input) { for (let i = 0; i < objects.length; i++) { if (objects[i + 1]) { if (objects[i].fee < input && input < objects[i + 1].fee) return objects[i].fee; } } return null; } console.log(find(701));Usé filtro con index. Mi respuesta es similar a la buena respuesta de @RomanHDev. Pero mi enfoque fue usar inmediatamente el índice para disminuir la coincidencia.
const obs = [{fee: 150}, {fee: 300}, {fee: 450}, {fee: 700}]; findObject = feeParam => obs.filter((o, i) => { if (o.fee >= feeParam) { return obs[i] ?? null; } })[0] console.log( findObject('25',25) ) console.log( findObject('155',155) ) console.log( findObject('225',225) ) console.log( findObject('301',301) )