JavaScript中的字符串转换

问题描述

我尝试构建一个JSON对象,该对象最终将保存到文件中。但是我发现如果使用接近“ element + = element”的方法,它将抛出“ Invalid string length”字符串。但是对于方法2,我可以连接一个很长的String并保存一个文件。 (文件约为50mb)。所以我想知道我的第一种方法有什么问题吗?

const person = {
    id: 1,name: "john"
}
personjson = JSON.stringify(person);
personjson = personjson + ',';

let element = personjson;
for (let index = 0; index < 500; index++) {
     element += element; 
}
let element = personjson;
for (let index = 0; index < 100000; index++) {
     element = element + personjson; 
}

解决方法

在两种方法中,您都会产生不同的结果,即 假设personJson包含字符串"ab"

  1. element = element + element;正在产生结果

    "ab" + "ab"
    
    "abab" + "abab"
    
    "abababab" + "abababab"
    

,依此类推... 这就是字符串长度呈指数增长的原因。

  1. element = element + personJson;

    "ab" + "ab"
    
    "abab" + "ab"
    
    "abababab" + "ab"
    

,依此类推... 这会使您的字符串长度线性增长。

为更好地理解,请运行以下代码并查看结果:

const person = {
    id: 1,name: "john"
}
personJson = JSON.stringify(person);
personJson = personJson + ',';

let element = personJson;
for (let index = 0; index < 500; index++) {
     element += element;
     console.log(element.length); 
}

,

正如评论中指出的那样,这可能不是编码JSON的最佳方法。

关于发生这种情况的原因,这是因为您的第一个循环实际上是每次迭代将大小乘以2,因此它呈指数增长。它很快就达到了远远超过第二个循环的大小,最终超过了javascript engine允许的字符串最大大小。

index = 0 ; length = 23
index = 1 ; length = 46
index = 2 ; length = 92
...
index = 24 ; length = 385875968
index = 25 ; length = 771751936
,

您可以创建要添加到该对象的对象数组。喜欢:

const persons= [] ;
persons.push({id:1,name: 'Shayan' });
persons.push({id:2,name: 'john' });
...