J'ai besoin d'aide sur la manière de transformer un tableau avec plusieurs objets dans lesquels je souhaite regrouper certains des types dans un seul objet. Spécifiquement ceux avec type "h *" et "texte". Jusqu'à présent, j'ai cette fonction Cela me donne une liste de tous les éléments maintenant avec les champs de type et de contenu. Je veux les regrouper maintenant sans interrompre la commande dans la liste. Je suis à mi-chemin de ce que je peux dire et maintenant je suis coincé. P> plus, il y a probablement une méthode plus facile que j'ai utilisée ici. p> Voici un exemple de tableau initial: p> {"contentAfter": [
{
"type": "text-block",
"content": "<h2>Header 2</h2><p>Some Text <a href=\"https://let/me/out\">and</a> then some</p><p>Some more text</p>"
},
{
"type": "list-simple",
"content": {
"header": "Qs",
"html": "<ul><li>Q1</li><li>Q2</li><li>Q3</li><li>Q4</li><li>Q5</li></ul>"
}
},
{
"type": "image-block",
"content": {
"url": "qs.png",
"altText": "qs",
"seoImportant": true,
"imgSrc": "",
"imgEmbedded": false,
"articleID": "artcile1234",
"height": 700,
"width": 1200
}
},
{
"type": "text-block",
"content": "<p>Somebody</p><p>I used to know</p><h3>Header 3</h3><p>More text</p><ol><li>1</li><li><a href=\"https://hear.com/me/out\">2</a></li><li>3</li></ol>"
},
{
"type": "list-simple",
"content": {
"header": "1. Q1?",
"html": "<p><em>Big 1</em></p>"
}
},
{
"type": "list-simple",
"content": {
"header": "2. Q2?",
"html": "<p><em>Big 2</em></p>"
}
},
{
"type": "text-block",
"content": "<h3>Header 3</h3><p>More text?</p>"
},
{
"type": "list-pos",
"content": {
"header": "Qq:",
"html": "<ul><li><em>1</em></li><li><em>2</em></li></ul>"
}
},
{
"type": "text-block",
"content": "<p>Even more text</p>"
}
]}
3 Réponses :
Je ne suis pas sûr de comprendre ce que vous essayez de faire, mais voici un script qui reproduit les pièces que j'ai pu remarquer et me semble créer la sortie que vous donnez comme exemple de sortie pour l'entrée donnée:
p>
const content = {"contentBefore": [ { "type": "H2", "html": "<h2>Header 2</h2>" }, { "type": "text", "html": "<p>Some Text <a href=\"https://let/me/out\">and</a> then some</p>" }, { "type": "text", "html": "<p>Some more text</p>" }, { "type": "list-simple", "simple": { "header": "Qs", "html": "<ul><li>Q1</li><li>Q2</li><li>Q3</li><li>Q4</li><li>Q5</li></ul>" } }, { "type": "image", "content": { "url": "qs.png", "altText": "qs", "seoImportant": true, "imgSrc": "", "imgEmbedded": false, "articleID": "artcile1234", "height": 700, "width": 1200 } }, { "type": "text", "html": "<p>Somebody</p>" }, { "type": "text", "html": "<p>I used to know</p>" }, { "type": "H3", "html": "<h3>Header 3</h3>" }, { "type": "text", "html": "<p>More text</p>" }, { "type": "text", "html": "<ol><li>1</li><li><a href=\"https://hear.com/me/out\">2</a></li><li>3</li></ol>" }, { "type": "list-simple", "simple": { "header": "1. Q1?", "html": "<p><em>Big 1</em></p>" } }, { "type": "list-simple", "simple": { "header": "2. Q2?", "html": "<p><em>Big 2</em></p>" } }, { "type": "H3", "html": "<h3>Header 3</h3>" }, { "type": "text", "html": "<p>More text?</p>" }, { "type": "list-pos", "pos": { "header": "Qq:", "html": "<ul><li><em>1</em></li><li><em>2</em></li></ul>" } }, { "type": "text", "html": "<p>Even more text</p>" } ]}; const getType = function(item) { if (/^H/.test(item.type) || item.type == "text") return "text-block"; if (item.type == "image") return "image-block"; // Looks like you may have more logic for this; not going to try to reproduce it return item.type; } let currentTextBlock = null; content.contentAfter = content.contentBefore.reduce(function(result,item) { const type = getType(item); if (type == "text-block") { if (currentTextBlock) { currentTextBlock.content += item.html; } else { currentTextBlock = { type: "text-block", content: item.html }; result.push(currentTextBlock); } } else { currentTextBlock = null; result.push(Object.assign({}, item, { type: type })); } return result; }, []); console.log(JSON.stringify(content,void(0)," "))
Oui, c'était exactement ça. Pardon pour une description vague. Merci
Vous pouvez regrouper par tout le texte et stocker la dernière partie de texte pour une utilisation ultérieure.
p>
.as-console-wrapper { max-height: 100% !important; top: 0; }
Vous pouvez grouper comme ceci. J'espère que cela résoudra votre problème.
var data = [ { "type": "H2", "html": "<h2>Header 2</h2>" }, { "type": "text", "html": "<p>Some Text <a href=\"https://let/me/out\">and</a> then some</p>" }, { "type": "text", "html": "<p>Some more text</p>" }, { "type": "list-simple", "simple": { "header": "Qs", "html": "<ul><li>Q1</li><li>Q2</li><li>Q3</li><li>Q4</li><li>Q5</li></ul>" } }, { "type": "image", "content": { "url": "qs.png", "altText": "qs", "seoImportant": true, "imgSrc": "", "imgEmbedded": false, "articleID": "artcile1234", "height": 700, "width": 1200 } }, { "type": "text", "html": "<p>Somebody</p>" }, { "type": "text", "html": "<p>I used to know</p>" }, { "type": "H3", "html": "<h3>Header 3</h3>" }, { "type": "text", "html": "<p>More text</p>" }, { "type": "text", "html": "<ol><li>1</li><li><a href=\"https://hear.com/me/out\">2</a></li><li>3</li></ol>" }, { "type": "list-simple", "simple": { "header": "1. Q1?", "html": "<p><em>Big 1</em></p>" } }, { "type": "list-simple", "simple": { "header": "2. Q2?", "html": "<p><em>Big 2</em></p>" } }, { "type": "H3", "html": "<h3>Header 3</h3>" }, { "type": "text", "html": "<p>More text?</p>" }, { "type": "list-pos", "pos": { "header": "Qq:", "html": "<ul><li><em>1</em></li><li><em>2</em></li></ul>" } }, { "type": "text", "html": "<p>Even more text</p>" } ]; data.reduce(function(acc,val){ if(acc[val["type"]]){ acc[val["type"]].push(val); } else { acc[val["type"]] = [val]; } return acc; },{});
Qu'est-ce que vous voulez dire avec "regrouper" i>?
Veuillez cliquer sur Modifier puis
[<>] code> pour créer un Exemple reproductibleminimal
1er, on dirait que vous faites la même chose pour toutes les personnes sauf le type code> image code>. 2e, je pense que
continuer; code> ou
pause; code> au lieu de
retour; code> pourrait mieux répondre à votre usecase, difficile à dire. Ok, alors votre problème est-il quoi maintenant?
@Ninascholz "regroupement" n'était probablement pas la meilleure description. Je voulais recueillir des objets avec des types H2, H3 et un texte qui sont à côté du même type et les combinent en un sans gâcher l'ordre des autres éléments du tableau