textarea.value按换行分割后,遍历为何返回行索引而非内容?
问题原因与解决方案
错误根源
你用for...in遍历数组时,迭代的是数组的索引(键名),而非数组的元素值。textarea.value.split("\n")确实返回了每行文本组成的数组,但for...in会把数组的索引(0、1、2...)赋值给line变量,所以后续line.split(": ")自然会把数字字符串分割,导致生成以索引为键的错误JSON。
修复方案
可以用以下几种方式正确遍历数组元素:
1. 使用for...of循环(推荐,直接遍历元素)
console.log(textarea.value); let json = "{"; for (const line of textarea.value.split("\n")) { // 跳过空行(避免最后一行空字符串导致的错误) if (!line.trim()) continue; const keyval = line.split(": "); json += `"${keyval[0]}": "${keyval[1] || ""}",`; } // 移除最后一个多余的逗号,再闭合JSON json = json.replace(/,$/, "") + "}"; console.log(json);
2. 使用普通for循环(基于索引访问元素)
console.log(textarea.value); const lines = textarea.value.split("\n"); let json = "{"; for (let i = 0; i < lines.length; i++) { const line = lines[i]; if (!line.trim()) continue; const keyval = line.split(": "); json += `"${keyval[0]}": "${keyval[1] || ""}",`; } json = json.replace(/,$/, "") + "}"; console.log(json);
3. 更健壮的写法:先构建对象再序列化
手动拼接JSON容易出现逗号、特殊字符等问题,建议先把键值对存入对象,再用JSON.stringify生成标准JSON:
const result = {}; textarea.value.split("\n").forEach(line => { line = line.trim(); if (!line) return; // 处理值中可能包含冒号的情况(比如"key: value: with colon") const [key, ...valueParts] = line.split(": "); const value = valueParts.join(": ") || ""; result[key] = value; }); const json = JSON.stringify(result, null, 2); console.log(json);
内容的提问来源于stack exchange,提问作者ijk
相关产品推荐
相关产品推荐

