Estoy atascado filtrando un rango de valores de un objeto json.
A continuación se muestran los datos del rango
const contractAmountRange = [ { id: '1', min: 0, max: 100000, description: 'Less than $100,000' }, { id: '2', min: 100001, max: 500000, description: '$100,001 to $500,000', }, { id: '3', min: 500000, max: 1000000, description: '$500,000 to $1,000,000', }, { id: '4', min: 1000001, max: 5000000, description: '$1,000,001 to $5,000,000', }, { id: '5', min: 5000000, description: 'More than $5,000,000', }, ];Si se selecciona cualquiera de los rangos, necesito filtrar el objeto json con ese rango elegido. la estructura del objeto json es la siguiente:
const data = [ { tenderNo: 'ASHQ17HH26334', awardedAmt: 400000, yearAwarded: 2015, }, { tenderNo: 'BFG8765TT14000008', awardedAmt: 300000, yearAwarded: 2015, }, { tenderNo: 'AFSH00ETT14000009', awardedAmt: 76071.21, yearAwarded: 2015, }, ];Aquí es donde estoy ahora.
los datos son un objeto json
contractAmountRange es la matriz de rango disponible
rangeSelected es el rango elegido, está representado por su id
const filterData = (data,contractAmountRange,rangeSelected) => { // let maxRange, minRange; const rangeMap = {}; for (const item of contractAmountRange) { rangeMap[item.id] = item; } const filteredData = data.filter((el) => { return ( ????? );Primero find el rango seleccionado, luego filtre los elementos cuyo awardedAmt está incluido entre min y max encontrados:
const contractAmountRange = [{ id: "1", min: 0, max: 100000, description: "Less than $100,000" }, { id: "2", min: 100001, max: 500000, description: "$100,001 to $500,000", }, { id: "3", min: 500000, max: 1000000, description: "$500,000 to $1,000,000", }, { id: "4", min: 1000001, max: 5000000, description: "$1,000,001 to $5,000,000", }, { id: "5", min: 5000000, description: "More than $5,000,000", }, ]; const data = [{ tenderNo: "ASHQ17HH26334", awardedAmt: 400000, yearAwarded: 2015, }, { tenderNo: "BFG8765TT14000008", awardedAmt: 300000, yearAwarded: 2015, }, { tenderNo: "AFSH00ETT14000009", awardedAmt: 76071.21, yearAwarded: 2015, }, ]; const filterData = (data, contractAmountRange, rangeSelected) => { const foundRange = contractAmountRange.find((x) => x.id === rangeSelected); if (!foundRange) { throw new Error("No range found!"); } const { min, max } = foundRange; return data.filter( ({ awardedAmt }) => awardedAmt >= min && awardedAmt <= max ); }; const output = filterData(data, contractAmountRange, "2"); console.log(output);