如何在 JavaScript 中创建对象数组?
How to create an array of objects in JavaScript?
下面是我使用 JavaScript 创建对象数组的问题。我收到错误消息,其中添加了新行,如下所示,我需要拆分消息并收集行号。如果是重复的错误消息,行号应该用逗号分隔。
我通过一些丑陋的方式实现了,当我尝试连接行号时它添加了 "undefined" 字符串。
此外,我可能需要针对大数据优化的解决方案。大多数时候我可能会收到 3000 到 7000 之间的错误消息。我使用的是 Angular 6 版本。
下面提到了我想要的输出。
var errorMsg = `No address details found for record at row 3.
No address details found for record at row 4.
Invalid Street Number at row 5.
Invalid Zip at row 6.
Invalid Zip at row 7.
Invalid Zip at row 11.`
var errorDisp = errorMsg.split(/^(.*)(\d.)/gm);
errorDisp = errorDisp.filter(function(entry) {
return /\S/.test(entry);
});
var object = {};
var rows = [];
errorDisp.forEach(function(a, i, aa) {
if (i & 1) {
object[aa[i - 1]] += "," + a;
}
});
console.log(object);
输出:
{
"No address details found for record at row ": "undefined,3.,4.",
"Invalid Street Number at row ": "undefined,5.",
"Invalid Zip at row": "undefined,6.,7.,11."
}
所需输出:
{
"No address details found for record at row ": "3,4",
"Invalid Street Number at row ": "5",
"Invalid Zip at row": "6,7,11"
}
您可以使用 /\s*(.*?)(\d+).$/
获取键和值来分隔捕获组。使用 exec
遍历匹配项并更新输出对象。如果密钥已经存在,请更新它。否则向对象添加一个新键
var errorMsg = `No address details found for record at row 3.
No address details found for record at row 4.
Invalid Street Number at row 5.
Invalid Zip at row 6.
Invalid Zip at row 7.
Invalid Zip at row 11.`
let regex = /\s*(.*?)(\d+).$/gm,
output = {},
match;
while(match = regex.exec(errorMsg)) {
const [,key, value] = match;
if(output[key])
output[key] += `,${value}`
else
output[key] = value
}
console.log(output)
这是一个没有句点的修改后的正则表达式:
var errorDisp = errorMsg.split(/^(.*)(\d+)\./gm);
然后,确保在将 a
添加到逗号列表之前检查 a
是否为假:
if (a) object[aa[i - 1]] += "," + a;
下面是我使用 JavaScript 创建对象数组的问题。我收到错误消息,其中添加了新行,如下所示,我需要拆分消息并收集行号。如果是重复的错误消息,行号应该用逗号分隔。
我通过一些丑陋的方式实现了,当我尝试连接行号时它添加了 "undefined" 字符串。
此外,我可能需要针对大数据优化的解决方案。大多数时候我可能会收到 3000 到 7000 之间的错误消息。我使用的是 Angular 6 版本。
下面提到了我想要的输出。
var errorMsg = `No address details found for record at row 3.
No address details found for record at row 4.
Invalid Street Number at row 5.
Invalid Zip at row 6.
Invalid Zip at row 7.
Invalid Zip at row 11.`
var errorDisp = errorMsg.split(/^(.*)(\d.)/gm);
errorDisp = errorDisp.filter(function(entry) {
return /\S/.test(entry);
});
var object = {};
var rows = [];
errorDisp.forEach(function(a, i, aa) {
if (i & 1) {
object[aa[i - 1]] += "," + a;
}
});
console.log(object);
输出:
{
"No address details found for record at row ": "undefined,3.,4.",
"Invalid Street Number at row ": "undefined,5.",
"Invalid Zip at row": "undefined,6.,7.,11."
}
所需输出:
{
"No address details found for record at row ": "3,4",
"Invalid Street Number at row ": "5",
"Invalid Zip at row": "6,7,11"
}
您可以使用 /\s*(.*?)(\d+).$/
获取键和值来分隔捕获组。使用 exec
遍历匹配项并更新输出对象。如果密钥已经存在,请更新它。否则向对象添加一个新键
var errorMsg = `No address details found for record at row 3.
No address details found for record at row 4.
Invalid Street Number at row 5.
Invalid Zip at row 6.
Invalid Zip at row 7.
Invalid Zip at row 11.`
let regex = /\s*(.*?)(\d+).$/gm,
output = {},
match;
while(match = regex.exec(errorMsg)) {
const [,key, value] = match;
if(output[key])
output[key] += `,${value}`
else
output[key] = value
}
console.log(output)
这是一个没有句点的修改后的正则表达式:
var errorDisp = errorMsg.split(/^(.*)(\d+)\./gm);
然后,确保在将 a
添加到逗号列表之前检查 a
是否为假:
if (a) object[aa[i - 1]] += "," + a;