【问题标题】:make array from string by converting datatype using javascript通过使用 javascript 转换数据类型从字符串创建数组
【发布时间】:2021-06-13 01:08:21
【问题描述】:

我的string如下

let a = "0j (0.001953125+0j) (-0.001953125+0.001953125j) (0.998046875+0j) (-0.001953125+0j) (0.001953125+0j) (0+0.0914587j)"

关于string的信息:
1/ 每个substringcomplex number,格式为a+bj
2/complex number 的可能格式为a+bj,a,bj。例如:1+2j12j
3/每个substring之间有一个空格( )
4/我看到0+bj(例如:0+5j)或a+0j(例如:5+0j)格式是不可能的/由后端创建的,所以这种类型的format/ presentation不适合我的情况。
5/ 如果substring 仅包含real/imaginary 部分,则不会使用parenthesis ()。例如:(5),(5j) 是不可能的。他们将是5,5j

我需要从该字符串创建一个 JSON 或 JavaScript 对象,用于绘制数据。数据来自Flask backend,与each request 不同。我发现制作这个 JSON 对象的一种方法是来自 array,它应该看起来像

let my_array = [[0,0], [0.001953125,0], [-0.001953125,0.001953125], [0.998046875,0],[-0.001953125,0],[-0.001953125,0],[0,0.914587]]

但是我完全迷失在制作这个数组中。最初,我已经通过a.replaceAll("j","") 从字符串中删除了所有j,但是我还没有找到一种方法来制作我想要的数组结构。如果我得到数组,我可以使用以下方法制作 JSON 对象:

my_array = [[0,0], [0.001953125,0], [-0.001953125,0.001953125], [0.998046875,0],[-0.001953125,0],[-0.001953125,0],[0,0.914587]]
temp_key = ["i", "q"]
my_json = {
  
}
for(let a = 0; a < my_array.length; a++){
    temp_json = {};
    for(let b = 0; b < my_array[a].length; b++){
        temp_json[temp_key[b]] = my_array[a][b];
}
my_json[String(a)] = temp_json;
}

console.log("my_json: ",my_json)

我们将不胜感激有关制作此数组的建议。

【问题讨论】:

  • j 是干什么用的,+ 是干什么用的?最初我认为 j = 0 是一个单独的数字,但后来在第三组中被忽略了?
  • 0.0.914587j 看起来像错字?你的意思是0.0914587j
  • 我认为这个问题不清楚。 5j5-5-1j-5j+2+5-1j 这样的值是否可能?
  • @vanowm j 是虚部。数据来自 Python 后端作为字符串。 + 也是表示类型 a+bj
  • @CertainPerformance 是的。修复它

标签: javascript arrays string


【解决方案1】:

您可以按空格分隔,然后使用正则表达式匹配子字符串中的数字字符(例如0.001953125+0j0.0019531250)。

const str = "0j (0.001953125+0j) (-0.001953125+0.001953125j) (0.998046875+0j) (-0.001953125+0j) (0.001953125+0j) (0+0.914587j)";
const arr = str
  .split(' ')
  .map((substr) => {
    const [real, imag = 0] = substr.match(/-?\d+(?:\.\d+)?/g).map(Number);
    return [real, imag];
  });
console.log(arr);

-?\d+(?:\.\d+)? 是:

  • -? - 可能匹配领先的 -
  • \d+ - 匹配一位或多位数字
  • (?:\.\d+)? - 可选匹配以下内容(数字的小数部分):
    • \. - 文字 .
    • \d+ - 一位或多位数字

【讨论】:

  • 您的方法在大多数情况下都已解决。但是const str = "5j"; 呢?为此,我期望{ 0: { i: 0, q: 5 } } 但我得到{ 0: { i: 5, q: 0 } } i,q 格式是不可取的。有什么办法解决这个问题吗?
  • 第一个子字符串与括号中其余所有字符串的格式不匹配。它是否有任何其他可能的格式,或者\dj 是那里唯一可能的子字符串?
  • substring 的可能格式可以是a+bjabj。我已经用你的解决方案测试了a+bja 工作正常。但是当bj 出现时,它无法区分realimaginary 部分。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2017-07-10
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多