Tengo una matriz [name1,item1,name2,item2,name3...] y necesito mapearla en
{ "@type": "ListItem", position: index + 1, name: , item: , }Traté de dividirlo en dos matrices separadas como:
var nameBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter( function (value, index, Arr) { return index % 2 == 0; } ); var urlBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter( function (value, index, Arr) { return index % 2 == 1; } ); var faqStructuredDataSplit = nameBreadCrumbStructuredData.map((i) => { urlBreadCrumbStructuredData.map((j) => ({ "@type": "ListItem", position: "", name: i, item: j, })); });pero desafortunadamente no funciona. Intenté algunas formas diferentes y también forEach, pero estoy atascado. ¿Alguien puede ayudarme a hacer un bucle en una matriz pero cada segundo elemento o dos matrices al mismo tiempo? ¡Gracias por ayudar!
Como resultado, necesito obtener esto, mediante el mapeo:
const breadCrumbStructuredData = { "@context": "https://schema.org", "@type": "BreadcrumbList", itemListElement: [ { "@type": "ListItem", position: 1, name: "nameExample", item: "https://example.com/", }, { "@type": "ListItem", position: 2, name: nameExampl1, item: "https://example1.com/", }, { "@type": "ListItem", position: 3, name: nameExamp2, item: "https://example2.com/", }, { "@type": "ListItem", position: 4, name: nameExamp3, item: "https://example3.com/", }, ], };cómo hacer un bucle en una matriz pero cada segundo elemento
Puedes usar el bucle for normal.
const splitBreadCrumbStructuredData = ["name1", "item1", "name2", "item2", "name3", "item3"]; var faqStructuredDataSplit = []; for(let i = 0, p = 1; i < splitBreadCrumbStructuredData.length; i += 2){ faqStructuredDataSplit.push ({ "@type": "ListItem", position: p++, name: splitBreadCrumbStructuredData[i], item: splitBreadCrumbStructuredData[i + 1], }); } console.log(faqStructuredDataSplit);dos arreglos al mismo tiempo
No necesita hacer un bucle en ambas matrices en la función de mapa.
var faqStructuredDataSplit = nameBreadCrumbStructuredData.map((data, index) => ({ "@type": "ListItem", position: index + 1, name: data, item: urlBreadCrumbStructuredData[index], }));El fragmento de código completo
const splitBreadCrumbStructuredData = ["name1", "item1", "name2", "item2", "name3", "item3"]; var nameBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter( function (value, index, Arr) { return index % 2 == 0; } ); var urlBreadCrumbStructuredData = splitBreadCrumbStructuredData.filter( function (value, index, Arr) { return index % 2 == 1; } ); var faqStructuredDataSplit = nameBreadCrumbStructuredData.map((data, index) => ({ "@type": "ListItem", position: index + 1, name: data, item: urlBreadCrumbStructuredData[index], })); console.log(faqStructuredDataSplit);Si entiendo correctamente, quieres convertir algo como esto:
["name1","value1","name2", "value2"]dentro
[ {position: 1,name: "name1",item: "value1"}, {position: 2,name: "name2",item: "value2"} ]Esto se puede hacer en una sola pasada sin tener que crear 2 matrices separadas
const input = ["name1","value1","name2", "value2"]; const result = []; for(let i=0,p=1; i<input.length;i+=2,p++){ result.push( { position: p, name: input[i], item: input[i+1] } ); } console.log(result);Tiene un poco más de estructura en torno al resultado deseado, esto está bien... solo agréguelo en:
const input = ["name1","value1","name2", "value2"]; const breadCrumbStructuredData = { "@context": "https://schema.org", "@type": "BreadcrumbList", itemListElement:[] } for(let i=0,p=1; i<input.length;i+=2,p++){ breadCrumbStructuredData.itemListElement.push( { "@type":"ListItem", position: p, name: input[i], item: input[i+1] } ); } console.log(breadCrumbStructuredData);