Преобразование значений массива строк из URLSearchParams - PullRequest
0 голосов
/ 20 декабря 2018

Как преобразовать значения строкового массива в объект массива Javascript?

var querystring = 'lang[]=EN&lang[]=FR&type[]=1&type[]=2';

Into:

{
    lang: ['EN', 'FR'],
    type: ['2']
}

Ниже моей попытки:

let params = new URLSearchParams(decodeURI(querystring));
let entries = params.entries();

let result = {}
for(let entry of entries) { // each 'entry' is a [key, value]
    result[entry[0]] = entry[1];
}
return result;

КакиеРезультаты:

[{
    "name": "lang[]",
    "value": "EN"
}, {
    "name": "lang[]",
    "value": "FR"
}, {
    "name": "type[]",
    "value": "2"
}]

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Простейшей версией было бы использование библиотеки типа qs

https://www.npmjs.com/package/qs#parsing-arrays

var withArray = qs.parse('a[]=b&a[]=c');

, повторяется в

a: ['b', 'c'] 
0 голосов
/ 20 декабря 2018

Вам, вероятно, следует проверить на [], чтобы ваш код не ломался с записями, не заканчивающимися на [].Затем вы можете отрезать [], чтобы ваши ключи не включали его:

var querystring = 'lang[]=EN&lang[]=FR&type[]=1&type[]=2&test=hello';

let params = new URLSearchParams(decodeURI(querystring));
let entries = params.entries();

let result = {}
for(let entry of entries) { // each 'entry' is a [key, value]
    let [key, val] = entry
    if (key.endsWith('[]')){         // array 
      key = key.slice(0,-2);         // clean up the key
      (result[key] || (result[key] = [])).push(val)
    } else {
      result[key] = val             // normal parameter
    }
}
console.log(result)
0 голосов
/ 20 декабря 2018

var querystring = 'lang[]=EN&lang[]=FR&type[]=1&type[]=2';
let params = new URLSearchParams(decodeURI(querystring));
let entries = params.entries();

let result = {}
for(let entry of entries) { // each 'entry' is a [key, value]
    var key = entry[0];
    var val = entry[1];
    if(key in result){
        result[key].push(val);
    }else{
        result[key] = [val];
    }
}
console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...