如何在JavaScript中创建对象数组?

拉贾

下面是我关于使用JavaScript创建对象数组的问题。我收到以下添加新行的错误消息,其中需要拆分消息并收集行号。如果是重复的错误消息,则行号应以逗号分隔。

我通过某种难看的方法实现了,当我尝试连接行号时,它添加了“未定义”字符串。

另外,我可能需要针对大数据进行优化的解决方案。大多数时候,我可能会收到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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章