Tengo problemas para resolver este problema:
Tengo una serie de objetos:
tableList = [ {table_number: 1}, {table_number: 11}, {table_number: 31} ]Estoy tratando de generar una lista de corchetes en pasos de 10 hasta el 'table_number' más grande.
Estoy usando una función de generador de secuencias para esto:
// Sequence generator function (commonly referred to as "range", eg Clojure, PHP etc) const range = (start, stop, step) => Array.from({ length: (stop - start) / step + 1}, (_, i) => start + (i * step));Estoy usando Math.max e itero a través de la matriz para encontrar el 'table_number' más grande:
// Search for biggest table number var max = Math.max.apply(Math, data.map(o => o.table_number));Luego genero la matriz de corchetes con la función de secuenciación:
// Generate brackets up until biggest table number var brackets = range(0, max, 10);Esto me da una matriz de corchetes de [0, 10, 20, 30].
Ahora la pregunta es, ¿cómo evalúo la matriz de objetos para eliminar el paso de paréntesis vacío (20) que no contendrá ningún 'número_tabla'?
¿O debería generar la matriz de corchetes de manera diferente?
Realmente agradecería cualquier ayuda para esto, ¡gracias!
En caso de que alguien tropiece con esto, he encontrado que esta es mi solución.
const brackets = [...new Set(data.map(item => item.table_number - (item.table_number % 10)))]Visito cada elemento en el objeto y luego resto de su resto para obtener los números en pasos de 10.
Luego creo un objeto Set a partir del resultado, eliminando efectivamente todos los duplicados.
¿O debería generar la matriz de corchetes de manera diferente?
Si solo busca una matriz como [0,10,30] , puede seguir una ruta diferente:
tableList = [ {table_number: 1}, {table_number: 11}, {table_number: 31} ] const tmpObj = tableList.reduce( (acc,cur) => { acc[ Math.floor(cur.table_number/10)*10 ] = true; return acc; } , {}) const brackets = Object.keys(tmpObj).map((x) => parseInt(x)); console.log(brackets);Pero esto es aprovechar lo fácil que es "en pasos de 10"