Задать вопрос
@bitrixweb
Вечно молодой, вечно пьяный

Как получить массив key=>value из строки?

Добрый вечер, друзья.

В JS не силен, а времени разбираться уже, к сожалению, нет в рамках этой проблемы.

На входе есть строка. В принципе я могу ее привести к любому виду, если это потребуется.
Сейчас эта строка имеет вид: "param1 = X, param2 = X, param3 = X"
На выходе же нужен массив аля array('param1' => 'X', 'param2' => 'X', 'param3' => 'X')

Вероятно, здесь нужны махинации с регулярками?
Насколько стало понятно из гугления, есть метод split, но в голом виде он мне не подходит, так как при таком раскладе (если использовать запятую в качестве сепаратора) невозможно раскидать результаты в "ключ => значение", и массив получится вида array('0' => 'param1 = X', '1' => 'param2 = X', '2' => 'param3 = X',).

Друзья, как решить эту задачу? Уверен, для тех, кто в теме - это плевое дело.
Заранее ОГРОМНОЕ спасибо!

UPD: у меня, конечно, есть варианты решения этой задачи, но боюсь, что они анальны, а изящное решение где-то рядом.

UPDATE: Друзья мои, ОГРОМНОЕ спасибо всем! Правда. Отмечаю решение господина Dark Hole лучшим, т.к. оно наиболее изящно из представленных, хоть и другие участники дискуссии заслуживают не меньшей благодарности :)
  • Вопрос задан
  • 315 просмотров
Подписаться 1 Оценить 2 комментария
Решения вопроса 1
abyrkov
@abyrkov
JavaScripter
PHPшник? В JS есть объекты и массивы. Массивы простые. Никаких асоцативных массивов. Поэтому, задачу можно решить двумя вариантами:
1. На выходе
{
  'param1': 'value1',
  'param2':  'value2'
}

2. На выходе
[['param1', 'value1'], ['param2', 'value2']]
Итак, первый вариант сложнее, поэтому мы начнем со второго.
Вы почти угадали решение. Нужно использовать всего лишь пройтись по парам и разбить их еще раз. Еще есть регулярки, но это уж слишком и, к тому же, выйдет массив вида ['param1', 'value1', 'param2', 'value2']. Рассматривать его я не стану, т.к. можно относительно легко найти на эту тему. Да и вы не просили. Собственно код:
var string = "param1 = X, param2 = X, param3 = X";
var ar = string.split(', ');
for(var i = 0; i < ar.length; i++) {
  ar[i] = ar[i].split(' = ');
}

Первый вариант чуть сложнее, однако сводится к тому же:
var string = "param1 = X, param2 = X, param3 = X";
var ar = string.split(', ');
var obj = {};
for(var i = 0; i < ar.length; i++) {
  var el = ar[i].split(' = ');
  obj[el[0]] = obj[el[1]];
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@bitrixweb Автор вопроса
Вечно молодой, вечно пьяный
Что-то совсем мозг отсох. Есть же json...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы