javascript 中的字符串连接
String concaternation in javascript
我尝试构建一个 JSON 对象,该对象最终将保存到文件中。但是我发现如果我使用接近一个“元素+=元素”,它会抛出“无效的字符串长度”字符串。但是对于方法 2,我可以连接一个很长的字符串并保存一个文件。 (文件约为 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"
element = element + element;
正在产生结果
"ab" + "ab"
"abab" + "abab"
"abababab" + "abababab"
等等...
这就是字符串长度呈指数增长的原因。
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 的最佳方式。
至于为什么会这样,是因为你的第一个循环实际上是每次迭代都将size乘以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' });
...
我尝试构建一个 JSON 对象,该对象最终将保存到文件中。但是我发现如果我使用接近一个“元素+=元素”,它会抛出“无效的字符串长度”字符串。但是对于方法 2,我可以连接一个很长的字符串并保存一个文件。 (文件约为 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"
element = element + element;
正在产生结果"ab" + "ab" "abab" + "abab" "abababab" + "abababab"
等等... 这就是字符串长度呈指数增长的原因。
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 的最佳方式。
至于为什么会这样,是因为你的第一个循环实际上是每次迭代都将size乘以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' });
...