如何在不使用eval的情况下将JS数组文字从HTML输入字符串转换为数组对象

时间:2018-11-03 16:51:45

标签: javascript html

我正在尝试在HTML文本输入中接受JavaScript数组文字。

问题在于HTML文本输入被捕获为字符串,因此['name', 'who', 1]的输入变为"['name', 'who', 1]"

我的意图是让以下示例产生相应的输出。

"['river',"spring"]"        //  ["river","spring"]

"[{key:'value'},20,'who']"  //  [{"key":"value"},20,"who"]

解决此问题的方法是在下面的代码片段中使用 eval

const form = document.querySelector('.form'); 
    const inputField = document.querySelector('.input');
    const btnParse= document.querySelector('.btn'); 
    const out = document.querySelector('.out');  
   
    form.addEventListener('submit', (e)=> {   
      e.preventDefault(); 

      try {    
        parsed = eval(inputField.value);

        if(Array.isArray(parsed)) {       
          out.textContent = JSON.stringify(parsed);
        } else throw new Error('input is  not a valid array' );
      } catch(err) {
        out.textContent = `Invalid input: ${err.message}`;
      } 
    }); 
 <form class="form">   
      <fieldset> 
        <legend>Enter array to parse</legend>      
        <input class="input" type="text">      
        <input class="btn" type="submit" value="parse">  
      </fieldset>
    </form>
    <div>   
      <p class="out"> 
      </p> 
    </div>        


 有什么其他方法可以将JavaScript数组文字HTML文本输入转换为JS数组对象而无需使用 eval

2 个答案:

答案 0 :(得分:-1)

JSON.parse("[1,2,3,4,5,6,5,6,7,78]")

答案 1 :(得分:-2)

JSON.parse("[\"name\", \"who\", 1]")将为您服务。

了解JSON。解析here