2017-09-07 1 views
1

Je travaille sur un plugin chrome qui récupère des données. Mais maintenant, j'ai eu un problème, on m'a demandé de mettre en place un tableau imbriqué avec toutes les données que j'ai récupérées, mais je n'ai aucune idée sur la façon de procéder.Récupère les valeurs d'un tableau imbriqué généré dynamiquement

Ce que je veux créer:

var messagedata [{ 
time: messageTime, 
Date: messageDate, 
Text: messageText 
{ 
time: messageTime, 
Date: messageDate, 
Text: messageText 
} 
}]; 

Remarque que je sais comment créer ce qui précède quand j'ai les variables. Ce n'est pas le problème. Mais dans ce cas je ne sais pas comment déclarer les variables pour chaque message du tableau qui est généré.

Ce dont j'ai besoin est un tableau imbriqué pour chaque message contenu dans le code HTML. Donc l'exemple ci-dessus affiche 2 tableaux mais il pourrait être de 54 par exemple.

code i utiliser pour générer tableau normal:

adiv.innerHTML = cleanupDocString; 
    trs = adiv.querySelectorAll('tr[bgcolor="#FFFFFF"]'); 
    trs.forEach(function(tr) { 
    var d = []; 
    tr.querySelectorAll("td") 
     .forEach(function(td) { 
     var img = td.querySelector("img"), 
      src = img && img.attributes.getNamedItem("src").value; 
     d.push(src || td.textContent); 
     }); 
    msgs.push(d); 
    }); 

Le code met au-dessus ceci dans la console (cet exemple a 2 messages à l'intérieur, il y a des tableaux aussi avec 54 messages) :

  1. 0: Array (6)
    1. 0: "2017-08-31T00: 00: 00"
    2. 1: "13h22"
    3. 2: "MessageType"
    4. 3: » ClientName »
    5. 4: "Sujet"
    6. 5: "messageText"
    7. longueur: 6
    8. proto: Array (0)
  2. 1: Array (6)
    1. 0: "2017-08-31T00: 00: 00"
    2. 1: "13h21"
    3. 2: "MessageType"
    4. 3: « ClientName "
    5. 4:" Sujet "
    6. 5:" messageText "
    7. lenth: 6
    8. proto: Array (0)

Pour rendre la question plus facile: je besoin de savoir comment je peux mettre les données dans une variable que j'aille chercher du tableau ci-dessus. Je ne sais tout simplement pas comment le faire si c'est dynamique.

Ce que j'ai essayé:

var messageDate = msgs[0][0]; 
var messageTime = msgs[0][1]; 
var messageType = msgs[0][2]; 
var messageClient = msgs[0][3]; 
var messageSubject = msgs[0][4]; 
var messageText = msgs[0][5]; 

Les travaux de code ci-dessus mais seulement va chercher le premier message. J'ai besoin de tous les messages sur la page fournie. J'ai essayé d'utiliser un identifiant dans le premier [] mais cela ne m'a pas donné le résultat souhaité.

Merci pour votre aide et patience à l'avance.

sortie et le code a été légèrement modifié de sorte qu'il cache des informations personnelles

Répondre

0

Je suppose msgs est arrray de tableaux et l'ordre des propriétés est garantie

var mappedArray = msgs.map((msg)=> { 
    return { 
     messageDate : msg[0]; 
     messageTime : msg[1]; 
     messageType : msg[2]; 
     messageClient : msg[3]; 
     messageSubject : msg[4]; 
     messageText :msg[5]; 
    } 
}) 

Edit1 vous pouvez utiliser le tableau concat

var mergedArray = mappedArray.concat(otherArray); 
+0

Vous devez enlever le; derrière les variables, mais après cela, cela a fonctionné parfaitement. J'ai encore 1 question encore, j'ai 2 tableaux comme celui-ci maintenant et je veux les rejoindre ensemble. Mais quand j'utilise messageData.push (mappedArray); ça me donne juste des chiffres dans la console. Je veux techniquement ajouter un autre tableau au-dessus de tous les messages avec les variables que j'ai déjà. – Granny

+0

J'ai modifié la réponse est ce que vous cherchez? –

+0

Exactement ce que je voulais, merci! – Granny

0

Pour transformer le multi tableau dimensionnel à un tableau d'objets à l'aide de Array.prototype.map et un dictionnaire d'aide simple qui définit le mappage de propriété index =>.

var messages = [ 
 
    [ 
 
    "2017-08-31T00:00:00", 
 
    "13:22", 
 
    "MessageType", 
 
    "ClientName", 
 
    "Subject", 
 
    "messageText", 
 
    "unwanted value" 
 
    ], 
 
    [ 
 
    "2017-08-31T00:00:00", 
 
    "13:22", 
 
    "MessageType", 
 
    "ClientName", 
 
    "Subject", 
 
    "messageText", 
 
    "unwanted value" 
 
    ], 
 
    [ 
 
    "2017-08-31T00:00:00", 
 
    "13:22", 
 
    "MessageType", 
 
    "ClientName", 
 
    "Subject", 
 
    "messageText", 
 
    "unwanted value" 
 
    ] 
 
]; 
 

 
var mappingDef = { 
 
    0: 'messageDate', 
 
    1: 'messageTime', 
 
    2: 'messageType', 
 
    3: 'messageClient', 
 
    4: 'messageSubject', 
 
    5: 'messageText' 
 
}; 
 

 
function transformMessages(messages, mappingDef) { 
 
    return messages.map(function(message) { 
 
    var obj = {}; 
 
    for(var index in mappingDef) { 
 
     if(mappingDef.hasOwnProperty(index)) { 
 
     obj[mappingDef[index]] = message[index]; 
 
     } 
 
    } 
 
    return obj; 
 
    }); 
 
} 
 

 
console.log(transformMessages(messages, mappingDef));