![](/img/trans.png)
[英]Why is JavaScript adding extra square brackets when I push a sub array into another array?
[英]Getting extra brackets using array push
我正在嘗試構建一個小型的自定義記錄器,而我在進行數組推送時注意到我得到了多余的括號,無法弄清楚發生了什么。 這是示例輸出
{
"GuestCheckout": [
{
"log": "Product Id: 78-1212121",
"screenshot": ""
},
[
{
"log": "Product Color: undefined Product Size: 6 Lb Qty: 2",
"screenshot": ""
}
],
[
{
"log": "",
"screenshot": "results/screenshots/Guest Checkout - Failed.jpg"
}
]
]
}
這是具有記錄器功能的類
var logs = {},
curLogs = [];
module.exports = {
logger: function(log, screenshot) {
isScreenshot = screenshot || "false";
curTestName = testName.replace(/ /g,'');
curLogs = [];
if (isScreenshot == "true") {
curLogs.push({
"log": "",
"screenshot": log
});
} else {
curLogs.push({
"log": log,
"screenshot": ""
});
}
if (curTestName in logs) {
logs[curTestName].push(curLogs);
} else {
logs[curTestName] = curLogs;
}
console.log(curLogs);
}
}
您會注意到,第一個日志和屏幕截圖顯示,它用{}包裹,而第二個實例用[]包裹。 多次調用此記錄器功能。 我認為這與推動構建的方式有關,但我可能是錯的。 謝謝
更新:有了一個解決方案,現在的輸出看起來像這樣
{
"GuestCheckout": [
[
{
"log": "Product Id: 36-5173230",
"screenshot": ""
}
],
[
{
"log": "Product Color: undefined Product Size: 6 Lb Qty: 2",
"screenshot": ""
}
],
[
{
"log": "",
"screenshot": "results/screenshots/Guest Checkout - Failed.jpg"
}
]
]
}
現在的問題是所有{logs,screenshots}都放在方括號中。
當您將某些內容記錄到已經存在的測試中時,問題就開始了。 如果日志已經存在,則說明您正在推送數組而不是對象。 要解決此問題,您有兩個選擇。 要么拉出用於測試的現有陣列並直接將其推入,要么隨后將每個新的日志條目推入到測試中。
var logs = {},
curLogs = [];
module.exports = {
logger: function(log, screenshot) {
isScreenshot = screenshot || "false";
curTestName = testName.replace(/ /g,'');
if (!logs[curTestName]) {
// initialize logs entry
logs[curTestName] = [];
}
// get logs entry
curLogs = logs[curTestName];
if (isScreenshot == "true") {
curLogs.push({
"log": "",
"screenshot": log
});
} else {
curLogs.push({
"log": log,
"screenshot": ""
});
}
console.log(curLogs);
}
}
要么
var logs = {},
curLogs = [];
module.exports = {
logger: function(log, screenshot) {
isScreenshot = screenshot || "false";
curTestName = testName.replace(/ /g,'');
curLogs = [];
if (isScreenshot == "true") {
curLogs.push({
"log": "",
"screenshot": log
});
} else {
curLogs.push({
"log": log,
"screenshot": ""
});
}
if (curTestName in logs) {
Array.push.apply(logs[curTestName], curLogs);
} else {
logs[curTestName] = curLogs;
}
console.log(curLogs);
}
}
您將carlog定義為數組。 在第一步中,您將對象推到數組中。 這就是為什么沒有[]的原因。 在第2步和第3步中,您將數組推送到carlog。 這就是為什么有[]。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.