2016-03-21 2 views
1

Если у меня есть str = "[[1,Warriors,NBA],[2,Kings,NBA],[3,Knicks,NBA]]", как я могу превратить это в массив в JavaScript?Преобразование строки, которая выглядит как массив в фактический массив

Массив, в котором каждый элемент массива является массивом.

Возможно?

+0

Почему бы просто не создать массив для начала или, по крайней мере, действительный JSON – adeneo

+0

Если это формат содержимого, за которым вы застряли, вам придется написать собственный синтаксический анализатор, который понимает этот формат. Нет заранее подготовленного способа анализа этого нестандартного формата. – jfriend00

+0

Что такое источник этой строки? Сделав это правильным, json у источника будет помогать – charlietfl

ответ

2

Вы можете попробовать эту элементарную функцию я соединял для 2D массивов:

function customParse(data){ 
 
    arr = [] 
 
    for(var i = 0; i < str.length; i++){ 
 
     if(str[i] == ','){ 
 
     if(!isNaN(str[i-1])){ 
 
      arr.push(',') 
 
      arr.push('"') 
 
     }else{ 
 
      if(str[i-1] != "]"){ 
 
      arr.push('"') 
 
      arr.push(',') 
 
      arr.push('"') 
 
      }else{ 
 
      arr.push(',') 
 
      } 
 
     } 
 
     }else{ 
 
     if(str[i] == ']' && str[i-1] != ']'){ 
 
      arr.push('"') 
 
     } 
 
     arr.push(str[i]) 
 
     } 
 
    } 
 
    return JSON.parse(arr.join("")) 
 
} 
 

 
str = "[[1,Warriors,NBA],[2,Kings,NBA],[3,Knicks,NBA]]" 
 
result = customParse(str) 
 
alert("Raw: "+result); 
 
alert("Stringified: "+JSON.stringify(result));

2

Немного грязный, но будет делать трюк. переменная «matches» будет содержать ваш массив массивов.

var str = "[[1,Warriors,NBA],[2,Kings,NBA],[3,Knicks,NBA]]"; 
var cleanStr = str.substring(1,str.length-1) 

var matches = []; 

var pattern = /\[(.*?)\]/g; 
var match; 

while ((match = pattern.exec(cleanStr)) != null) 
{ 
    matches.push(match[1].split(",")); 
} 

Кроме того, если у вас есть опция, просто определите массив в javascript.

var list = [[1,'Warriors','NBA'],['2','Kings','NBA'],[3,'Knicks','NBA']]; 
0
var array = JSON.parse("[" + str + "]"); 

или вы можете использовать .split(), что также в конечном итоге с массивом строк.

Смежные вопросы