JavaScript - Converting URL like string params to an array -
i have string this:
var str = 'my_type_1=ssd&my_value_1=16gb&my_category_1=disk capacity&my_type_2=sony &my_value_2=ps4&my_category_2=console&my_roworder=2,1'; string has 3 parts except last key: part 1 -> - common prefix part 2 -> type or value or category , can keep changing part 3 -> it's numeric value binding part 1, part 2 , part 3 spreadsheet row.
the last key called my_roworder , it's comma delimeted value. specifies how construct output array.
in above example, 2,1 means key value pair of my_type_2=sony&my_value_2=ps4&my_category_2=console
should first in output array.
using javascript, parse string , create array out of it, such output is:
array ( [ 0 ] => array ( [type] => sony [value] => ps4 [category] => console [row] => 2 ) [ 1 ] => array ( [type] => ssd [value] => 16gb [category] => disk capacity [row] => 1 ) )
how can this? partially able way:
function stringtoarray(string) { var request = {}; var pairs = string.split('&'); (var = 0; < pairs.length-1; i++) { var pair = pairs[i].split('='); request[decodeuricomponent(pair[0])] = decodeuricomponent(pair[1]); } //i think in right track, need assistance }
your example output uses associative arrays, javascript doesn't have, can use array of objects instead.
this example outputs array of objects, in order specified roworder
parameter. trims prefix (defined prefix
), , trims row number end of key.
this work parameters in order - e.g. can mix them , parse necessary, , roworder
parameter can appear anywhere in string (doesn't have @ end).
function stringtoarray(string) { var prefix = 'my_'; // set prefix var output = [], request = []; var pairs = string.split('&'); var order; (var = 0; < pairs.length; i++) { var pair = pairs[i].split('='); if (pair[0].replace(prefix, '') == 'roworder') { order = pair[1]; } else { var key = decodeuricomponent(pair[0]); var pos = key.lastindexof('_'); var trimmedkey = key.substring(0, pos).replace(prefix, ''); var row = key.substring(pos + 1); var value = decodeuricomponent(pair[1]); var found = false; (var j = 0; j < output.length; j++) { if (output[j].row == row) { output[j][trimmedkey] = value; found = true; } } if (!found) { var obj = { 'row': row }; obj[trimmedkey] = value; output.push(obj); } } } // ordering based on roworder parameter var orderlist = order.split(","); for(var k=0; k<orderlist.length; k++){ for(var l=0; l<output.length; l++){ if(output[l].row == orderlist[k]){ request.push(output[l]); break; } } } return request; }
outputs array of objects in order specified my_roworder
parameter:
[ { row: "2", type: "sony", value: "ps4", category: "console" }, { row: "1", type: "ssd", value: "16gb", category: "disk capacity" } ]
Comments
Post a Comment