2012-04-25 2 views
0

Я работаю над пониманием jQuery с довольно хорошим знанием PHP.Создание массива Array из String в JQuery

У меня есть строка, например, так:

[donor="company1" web="http://company1.com" amount="5.50"];[donor="company2" web="http://company2.com" amount="40.00"] 

Я пытаюсь добиться результата ответили из этого question.

К сожалению, я не имею ни малейшего представления о том, как превратить свою строку в нечто вроде того, что спрашивающий другого вопроса должно начаться с, т.е .:

var data = [{'donor':'company1', 'web':'http://company1.com', 'amount':5.50}, 
      {'donor':'company2', 'web':'http://company2.com', 'amount':40.00}] 

Любая помощь вы можете предложить будет удивительным. Я предполагаю, что это имеет какое-то отношение к карте, ассоциативному массиву, объекту, но я просто не получаю его.

Заранее благодарим за это!

+0

Вашей проблема на самом деле не связанные с этим вопросом. У вас есть строка неформатированных данных, это не массив или объект или что-нибудь, что будет обрабатывать javascript. Если это действительно строка, вам придется ее разобрать. – elclanrs

+0

Он настолько похож на массив объектов JSON, что его можно легко преобразовать в реальном JSON, который может быть оправдан JavaScript. Вы можете проверить мой ответ. – JotaBe

ответ

0

Вы можете использовать регулярное выражение replacemnt преобразовать исходную строку в нужной строке:

var s='[donor="company1" web="http://company1.com" amount="5.50"];[donor="company2" web="http://company2.com" amount="40.00"]'; 
s='[' + s.replace(/\[/g,'{').replace(/\]/g,'}').replace(/=/g,':') 
    .replace(/"\s/g,'", ').replace(/{(.+?):/g,'{"$1":') 
    .replace(/;/g,',\r\n') + ']'; 

Результатом этого преобразования является строка, которую вы хотите получить, который является JSON нотации массива объектов ,

Если вы оцениваете это выражение JSON, вы получаете массив объектов.

Если добавить эти строки в конце предыдущего сценария, вы увидите, что вы получите массив длины 2, который содержит объекты, представленные JSON:

var t = eval(s); 
alert(t.length); // output 2, which is the array length 
alert(t[0].donor); // outputs company1, which is the donor of the first object in the array 

Вы можете играть вокруг с этим кодом в w3schools try it yourself editor .Copy и вставьте этот код:

<html> 
<head> 
<script type="text/javascript"> 
var s='[donor="company1" web="http://company1.com" amount="5.50"];[donor="company2" web="http://company2.com" amount="40.00"]'; 
s='[' + s.replace(/\[/g,'{').replace(/\]/g,'}').replace(/=/g,':') 
    .replace(/"\s/g,'", ').replace(/{(.+?):/g,'{"$1":') 
    .replace(/;/g,',\r\n') + ']'; 
var t = eval(s); 
alert("Array length: " + t.length); 
alert("1st object donor: " + t[0].donor); 
</script> 
</head> 
<body> 


</body> 
</html> 
+0

Спасибо @jotabe, это имеет смысл. Но у меня есть еще один вопрос. Как только я получаю массив, я передаю его в цикл for из ответа на этот вопрос [ссылка] (http://stackoverflow.com/questions/4538788/javascript-clearing-duplicates-from-an-array-object) [ ссылка], поскольку я изначально заявлял о своем намерении. После цикла for мне нужно вернуть его в исходный формат строки. Думаю, мне пришлось бы строчить массив, а затем изменить регулярное выражение? – danbrellis

+0

Я думаю, что могу использовать JSON.stringify (t), чтобы получить его в строку. @jotabe Любая помощь в обратном регулярном выражении? Благодаря! – danbrellis

+0

Реверс от JSON до вашего первоначального формата? – JotaBe

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