es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conversión de matriz de matrices en Javascript

Necesito crear un array de arrays.
Es importante mencionar que la base de datos es muy grande y que si algún atributo no tiene un valor correspondiente, envía una cadena vacía. Lo intenté con map y reduce pero no tuve éxito:

Cualquier ayuda será apreciada.

A continuación muestro un ejemplo de la salida esperada:

outputExpected = [
  ["id", 1, 2],
  ["name", "name1", "name2"],
  ["price", 6.95, 998.95],
  ["promoPrice", 5.91, 333.91],
  ["category", "test1 | test2", "test3 | test4"],
]

¿Hay alguna forma de resolver este problema de manera eficiente?

Este es mi código:

<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-js -->
let arrayObj = [{
    "id": 1,
    "name": "name1",
    "price": 6.95,
    "promoPrice": 5.91,
    "category": ["test1, test2"]
  },
  {
    "id": 2,
    "name": "name2",
    "price": 998.95,
    "promoPrice": 333.91,
    "category": ["test3, test4"]
  }
]

const headers = ["id", "name", "price", "promoPrice", "category"]
const result1 = headers.concat(arrayObj.map((obj) => {
  return headers.reduce((arr, key) => {
    arr.push(obj[key])
    return arr;
  }, [])
}))

console.log(result1)
<!-- end snippet -->
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear una matriz de matrices, puedes usar el método map para iterar sobre la matriz original de objetos y el método reduce para crear una matriz para cada objeto con sus valores correspondientes. Aquí hay una implementación que se encarga de los valores vacíos:

    let arrayObj = [{
        "id": 1,
        "name": "nombre1",
        "price": 6.95,
        "promoPrice": 5.91,
        "category": ["prueba1", "prueba2"]
      },
      {
        "id": 2,
        "name": "nombre2",
        "price": 998.95,
        "promoPrice": 333.91,
        "category": ["prueba3", "prueba4"]
      }
    ]
    
    const headers = ["id", "name", "price", "promoPrice", "category"]
    
    const result = arrayObj.reduce((acc, obj) => {
      const arr = headers.map(key => {
        return obj[key] !== undefined ? obj[key] : "";
      })
      acc.push(arr);
      return acc;
    }, [])
    
    console.log(result)
    

    El código anterior generará la siguiente matriz:

    [
      ["id", 1, 2],
      ["name", "nombre1", "nombre2"],
      ["price", 6.95, 998.95],
      ["promoPrice", 5.91, 333.91],
      ["category", "prueba1,prueba2", "prueba3,prueba4"]
    ]
    

    Esta implementación es eficiente ya que utiliza el método reduce para iterar sobre la matriz original de objetos una vez sin bucles anidados innecesarios. Los valores vacíos se manejan verificando si son indefinidos y reemplazándolos con una cadena vacía.

Comments are closed.