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.

¿Puedo convertir una cadena/lista de encabezado a un array con Nunjucks?

Estoy usando Eleventy y NetlifyCMS y quiero que un campo que es una cadena (separada por coma) se convierta en un arreglo en JSON para poder buscar elementos individuales en ese campo desde Fuse.js.

Así que escribí un archivo .njk que construye un índice JSON con todos los datos que necesito para buscar.

La materia frontal en archivos .md de Eleventy:

miCampoLista: elemento 1, elemento 2, elemento 3

Luego tomo los datos para construir un archivo JSON con un archivo .njk:

permalink: '../search.json'
eleventyExcludeFromCollections: true
[
  {% for post in collections['plantas'] %} 
  { 
    "miArregloDeItems":"{{ post.data['miCampoLista'] }}",
  }
  {% if loop.last == false %},{% endif %} {% endfor %}
]

Salida actual de search.json:

[
  {
    "miCampoLista":"elemento 1, elemento 2, elemento 3"
  },
  {
    "miCampoLista":"elemento 1, elemento 2, elemento 3"
  }
]

Salida esperada de search.json:

[
  {
    "miCampoLista":["elemento 1", "elemento 2", "elemento 3"]
  },
  {
    "miCampoLista":["elemento 1", "elemento 2", "elemento 3"]
  }
]

El problema es que obtengo una cadena separada por coma y quiero dividirla en un arreglo con cada elemento. ¿Es posible hacerlo en ese archivo Nunjucks?

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible convertir la cadena separada por comas en un array en el archivo Nunjucks utilizando el filtro split en Nunjucks. Puede modificar su código de esta manera:

    ---
    permalink: '../search.json'
    eleventyExcludeFromCollections: true
    ---
    
    [  
      {% for post in collections['plantas'] %} 
      { 
        "myarrayofitems":{{ post.data['mylistfield'] | split(',') }},
    
      }
      {% if loop.last == false %},{% endif %} {% endfor %}  
    ]
    

    Esto dividirá la cadena mylistfield por comas y devolverá una matriz de elementos individuales que luego puede buscar utilizando Fuse.js. La salida de search.json ahora estará en el formato esperado:

    [  
      { 
        "mylistfield": ["item 1", "item 2", "item 3"]
      },
      { 
        "mylistfield": ["item 1", "item 2", "item 3"]
      }
    ] 
    

    ¡Espero que esto ayude! Avíseme si tiene más preguntas.

Comments are closed.