1

我正在开发一个 Web 应用程序,用户可以将他们的 excel 数据(多行 2 列)复制到网站的文本区域。在同一页面点击提交按钮时,会将excel数据转换为JSON,在同一网页的不同文本区域显示JSON。

我已经有了一个 HTML 页面,只是不确定如何编写转换代码。(代码如下)

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset = "utf-8" />

      <title>Convert</title>
    </head>
    <body>
      <h1>Convert Table Data (2 Columns) To JSON</h1>

      <button onclick="convert()">Convert to JSON</button>
      <br><br>

      <textarea id="inputText" rows="50" cols="100"></textarea>
      <textarea id="outputText" rows="50" cols="100" readonly></textarea>

      <script>
        var textarea = document.getElementById("inputText");
        var textarea2 = document.getElementById("outputText");
        function convert() {
           // textarea2.value = textarea.value.convertToJSON......
        }
      </script>
    </body>
    </html>

以下是将 Excel 数据复制并粘贴到文本区域时的样子:

Amy apples
Betty oranges
Cathy watermelon
Daisy bananas
Edward pears
Fiona grapes

提交后预期结果将显示在不同的文本区域:

{
 "Amy" : "apples",
 "Betty" : "oranges",
 "Cathy" : "watermelon",
 "Daisy" : "bananas",
 "Edward" : "pears",
 "Fiona" : "grapes"
}
4

3 回答 3

1

您可以修剪字符串,然后将其拆分\n为字符串数组,映射数组并按空格拆分项目。现在您可以将数组数组转换为对象Object.fromEntries()

const str = `Amy apples
Betty oranges
Cathy watermelon
Daisy bananas
Edward pears
Fiona grapes`

const result = Object.fromEntries(str.trim().split('\n').map(s => s.split(' ')))

console.log(result)

于 2019-10-22T21:16:34.220 回答
0

在将键 + 值放在对象中的同时拆分字符串然后在数组上使用 forEach 怎么样?

// your textarea
let textarea = document.querySelector("textarea")
// the value of textarea
let value = textarea.value
// split the string from line breaks, so you have arrays of strings seperated from line breaks
let keys = value.split("\n")
// create an object to store the value on
let obj = {}
keys.forEach((val,index) => { // foreach the array
  let splitString = val.split(" ") // split the "Amy apples" into [Amy,apples]
  splitString[1] ? obj[splitString[0]] = splitString[1] : ""
})
//return and log them
console.log(obj)
<textarea>
Amy apples
Betty oranges
Cathy watermelon
Daisy bananas
Edward pears
Fiona grapes
</textarea>

于 2019-10-22T21:26:46.920 回答
-1

尝试

function convert() {
  let r= inputText.value.replace(/(\w+) (\w+)/g,'  "$1" : "$2",');
         
  outputText.value =  `{\n${r.slice(0, -1)}\n}`
}
<button onclick="convert()">Convert to JSON</button><br>
<textarea id="inputText" rows="10" cols="30">
Amy apples
Betty oranges
Cathy watermelon
Daisy bananas
Edward pears
Fiona grapes</textarea>
<textarea id="outputText" rows="10" cols="30" readonly></textarea>

于 2019-10-22T21:29:04.537 回答