Convert strings like document.cookie to objects

I have a line similar to document.cookie:

var str = 'foo=bar, baz=quux';

Converting it to an array is very simple:

str = str.split(', ');
for (var i = 0; i < str.length; i++) {
    str[i].split('=');
}

It produces something like this:

[['foo', 'bar'], ['baz', 'quux']]

Converting to an object (which would be more appropriate in this case) is more complicated.

str = JSON.parse('{' + str.replace('=', ':') + '}');

This creates an object that is invalid:

{foo: bar, baz: quux}

I need an object like this:

{'foo': 'bar', 'baz': 'quux'}

Note . I used single quotes in my examples, but when publishing code, if you use JSON.parse(), remember that double quotes are needed for single quotes.


Update

Thanks to everyone. Here is the function that I will use (for future use):

function str_obj(str) {
    str = str.split(', ');
    var result = {};
    for (var i = 0; i < str.length; i++) {
        var cur = str[i].split('=');
        result[cur[0]] = cur[1];
    }
    return result;
}
+3
source share
8 answers

JSON.parse ?

str = str.split(', ');
var result = {};
for (var i = 0; i < str.length; i++) {
    var cur = str[i].split('=');
    result[cur[0]] = cur[1];
}


, .

+8

a, :

[['foo', 'bar'], ['baz', 'quux']]

:

var obj = {};
for (var i = 0; i < a.length; ++i) {
   var tmp = a[i];
   obj[tmp[0]] = tmp[1];
}
+2

, :

var obj = {};
str = str.split(', ');
for (var i = 0; i < str.length; i++) {
    var tmp = str[i].split('=');
    obj[tmp[0]] = tmp[1];
}

, , JSON :

var jsonString = JSON.stringify(obj);
+2

note: document.cookie( ) ()...

reduce:

var str = 'foo=bar; baz=quux';
var obj = str.split(/[;] */).reduce(function(result, pairStr) {
  var arr = pairStr.split('=');
  if (arr.length === 2) { result[arr[0]] = arr[1]; }
  return result;
}, {});
+2

John Resig " " :

var str = 'foo=bar, baz=quux',
    arr = [],
    res = '{';

str.replace(/([^\s,=]+)=([^,]+)(?=,|$)/g, function ($0, key, value) { 
    arr.push('"' + key + '":"' + value + '"');
});

res += arr.join(",") + "}";

alert(res);

: http://jsfiddle.net/cm6MT/.

JSON. , exec() match().

</" > , , JSON, . :

var str = 'foo=bar, baz=quux',
    res = {};

str.replace(/([^\s,=]+)=([^,]+)(?=,|$)/g, function ($0, key, value) { 
    res[key] = value;
});
console.log(res.foo);
//-> "bar"

2: http://jsfiddle.net/cm6MT/1/

+1

, , =

var text = 'foo=bar, baz=quux',
    pattern = new RegExp(/\b([^=,]+)=([^=,]+)\b/g),
    obj = {};

while (match = pattern.exec(text)) obj[match[1]] = match[2];

console.dir(obj);
0

, / , .

function stringToObject(str, delimiter) {
    var result = {};
    if (str && str.length > 0) {
        str = str.split(delimiter || ',');
        for (var i = 0; i < str.length; i++) {
            var cur = str[i].split('=');
            result[cur[0]] = cur[1];
        }
    }
    return result;
}
0

cookie (IE9 +):

document.cookie.split('; ').reduce(function(result, v, i, a) { var k = v.split('='); result[k[0]] = k[1]; return result; }, {})

0

Source: https://habr.com/ru/post/1793161/


All Articles