2013-09-27 2 views
-2

Мой вызов Ajax получает "[['Best Value (62)',62 ],['LPTA (32)',32 ],] " как возвращаемое значение. Мне нужно передать это как массив. Есть ли способ сделать строку в массиве, не прибегая к eval()?Строка в JavaScript Массив

+4

Если у вас действительно есть эта конечная запятая, даже eval() не спасет вас. – Brian

+1

Почему у вас есть такой результат, а не как правильно json-закодированный массив? –

+1

@Brian: Конечные запятые действительны в литералах массива? – Bergi

ответ

0

Если вы избавитесь от конечной запятой и смените двойные кавычки на двойные кавычки, и все, что у вас есть в массиве, хорошо сформировано, вы можете использовать JSON.parse, чтобы превратить строку в массив. Если у вас есть доступ к серверному коду, скорее всего, вы захотите внести изменения там, а не в js.

JSON.parse("[[\"Best Value (62)\",62],[\"LPTA (32)\",32]]") 
+4

Это недопустимо JSON, либо (одинарные кавычки) – Brian

+0

Yep пропустил это. – scotty

+0

Удалено конечная запятая, сведено одинарные кавычки, чтобы удвоить, и вот мы идем! Благодаря! –

0

То, что вы не JSON, но действует JavaScript (при условии, лишняя запятая была ошибка копирования и вставки). И, насколько мне не нравится, вы можете использовать Eval:

// convert the input in to a javascript array 
var o = eval("[['Best Value (62)',62],['LPTA (32)',32]]"); 
// use jQuery map to grab only the first array value and return 
// each selection back as an array 
$.map(o, function(a){ 
    return a[0]; 
}); // ['Best Value (62)','LPTA (32)']; 

если дополнительная запятая там остаться, вы можете использовать немного больше обработки, чтобы избавиться от него:

var data = "[['Best Value (62)',62],['LPTA (32)',32],]"; 
var o = eval(data.replace(/\],\]$/,']]')); 
$.map(o, function(a){ 
    return a[0]; 
}); 
+0

* «... не прибегая к' eval() '" * – JJJ

+0

нет «не прибегая к eval». это не JSON, это не родной объект. единственный способ перевести его на то, с чем вы можете работать, - с eval ... –

+1

Дополнительная запятая не делает его недействительным JS. – Bergi

0
JSON.parse("[['Best Value (62)',62 ],['LPTA (32)',32 ],]".replace(/(,])$/, ']').replace(/'/g, '"')) 
+0

почему нисходящий? это делает то, что хочет пользователь! http://jsfiddle.net/BxqSr/ –

+1

не dv, но как бы вы обрабатывали одиночные кавычки в середине строки? теперь вы получите строковое значение, например '' doesn 't work', 'Если только данные не заданы, значения не могут быть указаны в кавычках –

+0

true, я исправлю это сразу –

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