javascript arrays search javascript-objects

javascript - Busque en la matriz de objetos la variable coincidente de entrada y verifique si coincide con otros campos



arrays search (1)

Puede usar array.filter , esto toma una función que se pasa a cada elemento de la matriz y devuelve verdadero o falso, y devuelve una nueva matriz que solo tiene elementos donde la función pasada al filtro devolverá verdadero.

Puede aplicar parcialmente una función al curry. Ejemplo de función al curry:

const plus = a => b => a+b; const plusTen = plus(10);//is a function that takes number b and adds 10 (a is 10) const eleven = plusTen(1); takes 1 for value of b and 10 for value of a

Aquí es cómo se puede usar la función al curry para comparar:

const equal = search => value => search === value; const isFive = equal(5); //... this will return false, search is 5 and value is 10 // 5===10 is false if(isFive(10)){

Proporcionar una función que obtendrá una propiedad de un objeto:

const getA = o => (o&&o.a); getA({a:10};//will return 10 getA({hasNoA:10};//will return undefined

Combina todo para crear una función de filtro:

const data = [ {a:3,b:2}, {a:4,b:6}, {a:5,b:8}, {a:6,b:9}, {a:7,b:3} ]; //filer function needs a getter (like getA) // comparer that is a partially applied function that takes a value and compares it // with o.something (if getter is getA it''ll compare with o.a) // o is the object that needs to be filtered (like elements of data: data[0]={a:3,b:2}) const filterFn = getter => comparer => o => comparer(getter(o)); //get a property const getA = o => (o&&o.a); //you can write getB I''m sure // compare search === value const equal = search => value => search === value; // compare search <= value const biggerEqual = search => value => search <= value; // all data items where item.a === 5 console.log( "a is 5", data.filter( filterFn(getA)(equal(5))//partially apply equal with search of 5 ) ); //all data items where item.a >= 5 console.log( "a equals or bigger 5", data.filter( filterFn(getA)(biggerEqual(5))//partially apply biggerEqual with search of 5 ) ); //if you want to compare b with some things you could do // const getB = o => (o&&o.b); // data // .filter(filterFn(getA)(biggerEqual(5)))//a bigger or equal 5 // .filter(filterFn(getB)(can you guess?)//b equal 5 // here is an example that takes an array of data and an array of filter functions // it''ll apply filter on array of data for every function const filterData = (array, filterFunctions) => filterFunctions.reduce( (result,filterFunction)=>result.filter(filterFunction), array ); // using filterData console.log( "using filterData", filterData(data,[ filterFn(getA)(biggerEqual(5))//partially apply biggerEqual with search of 5 //,you could add more filters here ]) )

Para un comparador más complejo (como querer saber si un valor del objeto está en una lista de valores) puede hacer lo siguiente:

const filterFn = getter => comparer => o => comparer(getter(o)); const data= [{id:23},{id:11},{id:435}]; const values= [23, 435, 5]; const getId = o => o.id; const isIn = haystack => needle => haystack.includes(needle); const isInValues = isIn(values); console.log( data.filter(filterFn(getId)(isInValues)) )

Así que el programa está tratando de asignar un aula. Hasta ahora, el programa le ha pedido al usuario el código de clase, el número de estudiantes y si se requieren computadoras, y se ha creado una matriz con los campos "cRObj.name", "cRObj.students" y cRObj.computers "(por lo tanto, el nombre del aula se incluirá en cRObj.name, la cantidad de capacidad de los alumnos en cRObj.students y si tiene computadoras (y / n) en cRObj.computers o no.

Tengo que buscar en la matriz de objetos para intentar encontrar una entrada que coincida con la cantidad de estudiantes que el usuario haya ingresado (lo que creo que sé cómo hacerlo).

Sin embargo, después de eso, debe comprobar que cRObj.computers sea igual a la entrada del usuario y luego guardar la entrada en cRObj.name si las dos primeras coinciden, lo cual no estoy seguro de cómo hacerlo.