我正在开发一个获取数据的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条消息的数组):
- 0:阵列(6)
- 0:" 2017-08-31T00:00:00"
- 1:" 13:22"
- 2:"消息类型"
- 3:” CLIENTNAME"
- 4:"主题"
- 5:"&的MessageText#34;
- 长度:6
- 的原:阵列(0)
- 1:阵列(6)
醇>
- 0:" 2017-08-31T00:00:00"
- 1:" 13:21"
- 2:" MessageType"
- 3:" ClientName"
- 4:"主题"
- 5:" messageText"
- lenth:6
- 的原:阵列(0)
使问题更容易: 我需要知道如何将数据放入我从上面的数组中获取的变量中。我只是不知道如何做到这一点,所以它的动态。
我尝试了什么:
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,但这也没有给我想要的结果。
感谢您的帮助和耐心提前。
输出和代码已经过轻微编辑,因此隐藏了个人信息
答案 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));