【问题标题】:How to create an array of objects in JavaScript?如何在 JavaScript 中创建对象数组?
【发布时间】:2019-12-23 03:30:45
【问题描述】:

以下是我在使用 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"
}

【问题讨论】:

  • 相同的错误信息是否总是彼此相邻,或者任何一行都有错误信息?
  • 是的,总是出现相同的错误消息,但行号不同。

标签: javascript json regex typescript angular6


【解决方案1】:

这是一个没有句点的修改正则表达式:

var errorDisp = errorMsg.split(/^(.*)(\d+)\./gm);

然后,只需确保在将 a 添加到逗号列表之前检查它是否为假:

if (a) object[aa[i - 1]] += "," + a;

【讨论】:

    【解决方案2】:

    您可以使用/\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)

    【讨论】:

    • 我不知道 JS 有一个 hash 构造 output = {}
    • @sln 那只是一个空的object literal
    猜你喜欢
    • 2016-07-11
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2018-08-18
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多