从动态生成的嵌套数组中获取值

时间:2017-09-07 07:26:51

标签: javascript arrays nested

我正在开发一个获取数据的chrome插件。但是现在我遇到了一个问题,我被要求将一个嵌套的数组与我检索到的所有数据放在一起,但我不知道如何解决这个问题。

我想要创建的内容:

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

注意我知道如何在拥有变量时创建上述内容。那不是问题。但在这种情况下,我不知道如何为生成的数组中的每条消息声明变量。

我需要的是HTML中每条消息的嵌套数组。所以上面的例子显示了2个数组,但例如可能是54个。

用于生成普通数组的代码:

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);
  });

上面的代码将其输出到控制台(此示例中包含2条消息,还有包含54条消息的数组)

  
      
  1. 0:阵列(6)      
        
    1. 0:" 2017-08-31T00:00:00"
    2.   
    3. 1:" 13:22"
    4.   
    5. 2:"消息类型"
    6.   
    7. 3:” CLIENTNAME"
    8.   
    9. 4:"主题"
    10.   
    11. 5:"&的MessageText#34;
    12.   
    13. 长度:6
    14.   
    15. :阵列(0)
    16.   
  2.   
  3. 1:阵列(6)      
        
    1. 0:" 2017-08-31T00:00:00"
    2.   
    3. 1:" 13:21"
    4.   
    5. 2:" MessageType"
    6.   
    7. 3:" ClientName"
    8.   
    9. 4:"主题"
    10.   
    11. 5:" messageText"
    12.   
    13. lenth:6
    14.   
    15. :阵列(0)
    16.   
  4.   

使问题更容易: 我需要知道如何将数据放入我从上面的数组中获取的变量中。我只是不知道如何做到这一点,所以它的动态。

我尝试了什么:

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];

以上代码有效,但只获取第一条消息。我需要提供的页面上的所有消息。我尝试在第一个[]中使用ID,但这也没有给我想要的结果。

感谢您的帮助和耐心提前。

输出和代码已经过轻微编辑,因此隐藏了个人信息

2 个答案:

答案 0 :(得分:0)

我假设msgs是数组的arrray并保证属性的顺序

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   你可以使用数组concat

var mergedArray = mappedArray.concat(otherArray);

答案 1 :(得分:0)

Array.prototype.map的帮助下将多维数组转换为对象数组,并使用一个简单的辅助字典来定义索引=>属性映射。



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));