Tengo una matriz de objetos con una lista de cursos y sus precios.
const courses = [ { name: "Courses in England", prices: [ 0, 100] }, //1st object { name: "Courses in Germany", prices: [ 500, null] }, //2nd object { name: "Courses in Italy", prices: [ 100, 200] }, //3rd object { name: "Courses in Russia", prices: [null, 400] }, //4th object { name: "Courses in China", prices: [ 50, 250] }, //5th object { name: "Courses in USA", prices: [ 200, null] }, //6th object { name: "Courses in Kazakhstan", prices: [ 56, 324] }, //7th object { name: "Courses in France", prices: [null, null] }, //8th object ];Aquí utilicé el método de filtro, que funciona cuando quiero filtrar por la propiedad del nombre del curso.
const filter = courses.filter((obj) => { return obj.name === "Courses in England"; }); console.log(filter); returns // { name: "Courses in England", prices: [0, 100] }Aquí usé el ciclo for para obtener todos los objetos en la matriz de cursos.
const filter = function (arr) { for (let i = 0; i < arr.length; i++) { console.log(arr[i]); } }; filter(courses);No puedo entender cómo modificar la función de filtro para aceptar la propiedad de precios que tiene 2 valores de elementos numéricos [100, 200] y para que solo devuelva objetos similares en la matriz con una propiedad de rango de precios similar.
Mi objetivo es el siguiente. Por ejemplo, cuando paso el número 100
debería devolver:
{ name: "Courses in England", prices: [ 0, 100] } { name: "Courses in Italy", prices: [ 100, 200] }porque ambos objetos tienen el valor 100.
que ?
el uso es:
let answerArray = courses.filtering( argument_value ) si argument_value es una string ,
la respuesta busca todos los elementos donde name === argument_value
si argument_value es una array ,
la respuesta busca todos los elementos donde la prices array es la misma que la argument_value array
si argument_value es null numérico (entero o flotante)
la respuesta busca todos los elementos donde la prices array incluye un valor null
const courses = [ { name: 'Courses in England', prices: [ 0, 100] } // 1st object , { name: 'Courses in Germany', prices: [ 500, null] } // 2nd object , { name: 'Courses in Italy', prices: [ 100, 200] } // 3rd object , { name: 'Courses in Russia', prices: [null, 400] } // 4th object , { name: 'Courses in China', prices: [ 50, 250] } // 5th object , { name: 'Courses in USA', prices: [ 200, null] } // 6th object , { name: 'Courses in Kazakhstan', prices: [ 56, 324] } // 7th object , { name: 'Courses in France', prices: [null, null] } // 8th object ]; courses.filtering = filter_Key => { if (typeof(filter_Key) === 'string') return courses.filter(obj => obj.name === filter_Key) if (Array.isArray(filter_Key)) return courses.filter(obj => JSON.stringify(obj.prices) === JSON.stringify(filter_Key)) if (filter_Key===null || Number.isFinite(filter_Key)) return courses.filter(obj => obj.prices.includes(filter_Key)) // if (Number.isInteger(filter_Key)) // return courses.filter(obj => // { // let [min,max] = [...obj.prices].sort((a,b)=>ab) // if (min===null) min = max || 0 // if (max===null) max= -1 // return ( min <= filter_Key && filter_Key <= max ) // }) // anything else... return [] }; console.log('Courses in England ->\n' + JSON.stringify(courses.filtering( 'Courses in England' ))) console.log('\n[100, 200] ->\n' + JSON.stringify(courses.filtering( [100, 200] ))) console.log('\n100 ->\n' + JSON.stringify(courses.filtering( 100 )).replaceAll('},{','}\n,{')) console.log('\nnull ->\n' + JSON.stringify(courses.filtering( null )).replaceAll('},{','}\n,{')) .as-console-wrapper {max-height: 100% !important;top: 0;} .as-console-row::after {display: none !important;}la propiedad de los precios que tiene 2 valores de elementos numéricos
recorra todos los objetos y verifique que el valor de la propiedad de precios tenga el tipo de número y devuelva dicho objeto.
const result = courses.filter(({ prices }) => prices.every(price => typeof price === "number")) console.log(result) // With love @kouqharpara que solo devuelva objetos similares en la matriz con una propiedad de rango de precios similar
puede proporcionar un rango de números y luego recorrer el result filtrando el rango.
Por ejemplo, rango de número entre 100 - 500 Su código final se verá como el ejemplo de código a continuación, puede escribir con esto (price >= 100 && price <= 500) también el operador && con ||
const result = courses.filter(({ prices }) => prices.every(price => typeof price === "number" && (price >= 100 && price <= 500))) console.log(result) // With love @kouqhar