2016-06-28 10 views
1

私はウェブサイトのデータレイヤーで作業していますが、サイトのバックエンドの値で埋められた文字列を渡す必要があります。ここでURLからコード化された文字列へのJavaScript配列

は私が合格する必要がある変数の構造である:

>エンコーディングの前に:

TRANSACTION_ID = 0815/2009; transaction_cid = 54AB; ITEM_IDは402163045080を=; item_va LUE = 25.20; item_quantity = 1; transaction_id = 0815/2009; transaction_cid = 54AB; item_id = 402163045080; item_va lue = 25.20; item_quantity = 1;符号化後

>:

TRANSACTION_IDの%3D0815%の2F2009%3Btransaction_cid%3D54AB%3Bitem_id%3D40216304 5080パーセント3Bitem_value%3D25.20%3Bitem_quantity%3D1%3Bitem_id%3D847163029054%3Bi tem_value%3D16.81%3Bitem_quantity%3D2

は、私は、このフォームで必要なデータを持つ配列を作成するために管理している:

「[{ "TRANSACTION_ID": "233684"、 "transaction_cid": "d2871c13c507583048d8ecf4a16f94c0"、 "I tem_id": "3524"、 "item_value": "4915.13"、 "item_quantity": "1"} ] '、

私が必要とするのは、URLエンコードされた文字列内の配列のこれらのすべての要素です。

私が試したことはすべてうまくいかないので、アイデアがありません。 ":" JSON.stringifyを使用して

は維持し、 ""」、警告を使用して()またはも続けて参加 ":" とパフォーマンスではありません

EDIT:

例アレイ:

arr : {key1: 'a', key2:'b', key3:'c'} 

非符号化結果:

str : 'key1=a;key2=b;key3=c' 

望ましい結果:

STR: 'キー1%3DA%3Bkey2%3DB%3Bkey3%3DC'

+0

、アレイを作成する方法を示して修正する方が簡単だろうそれはそこにある – charlietfl

答えて

2

encodeURIComponentJSON.stringifyを置き換えます

だから、あなた上記の例では1つのオブジェクトを持つ配列を持ちます。それを解析し、私がどうなるには:

var params = elementArray[0]; 
var encoded_params = []; 
for (var prop in params){ 
    if (params.hasOwnProperty(prop)) {    
     encoded_params.push(prop+ "=" +encodeURIComponent(params[prop])); 
    } 
} 
var query_string = "?" + encoded_params.join("&"); 

注: を私はあなたが持っている元の文字列/ wが、最初からこの問題を解決することを好む:

TRANSACTION_ID = 0815/2009; transaction_cid = 54AB; item_id = 402163045080; item_va lue = 25.20; item_quantity = 1;

// break string into components by splitting on `;`: 
var data_as_str = "transaction_id=0815/2009;transaction_cid=54AB;item_id=402163045080;item_va lue=25.20;item_quantity=1;"; 
var raw_params = data_as_str.split(";"); 

// create a new array where we will store our encoded params 
var encoded_params = []; 

// traverse the split string components 
for (var i=0; i<raw_params.length; i++){ 
    var element = raw_params[i]; 

    // check that the element exists 
    // for example, the trailing `;` will create an empty element 
    // which we do not want to include 
    if (!element){ 
     continue; 
    } 

    // split on `=` to get key, value 
    var key = element.split("=")[0]; 
    var value = encodeURIComponent(element.split("=")[1]); 

    // build a new param string and push to clean array 
    encoded_params.push(key+ "=" +value); 
} 

// after loop has completed, join elements 
// in clean array to complete query string 
var query_string = "?" + encoded_params.join("&"); 
alert(query_string); 
+0

ちょっとヨルダン答えに感謝しますが、私はそれがdoesntの仕事を指定しました – johan855

+0

これはクエリのパラメータを作成しません – charlietfl

+0

ええ、多分私はその質問を誤解しています。 URLをエンコードした後、それらを組み合わせてクエリ文字列にする必要がありますか? –

-1

あなたはjQueryのを使用している場合は、$.param()を使用することができます。そうしないと、ObjectのキーをループしてQueryStringをフォーマットできます。この例では、Object.keys()を使用してキーの配列を取得し、Array.map()はキーをループし、新しい配列ES6 template Stringを返します。 encodeURIComponentでは、QueryStringをエンコードします。

var obj = {key1: 'a', key2:'b', key3:'c'}; 
 

 
console.log(encodeURIComponent($.param(obj))); 
 

 
console.log(encodeURIComponent(Object.keys(obj).map(key=>`${key}=${obj[key]}`).join('&')));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

他の回答で指摘したように、あなたは最初の文字列からこれを行うことができます。

var str = "transaction_id=0815/2009;transaction_cid=54AB;item_id=402163045080;item_va lue=25.20;item_quantity=1;transaction_id=0815/2009;transaction_cid=54AB;item_id=402163045080;item_value=25.20;item_quantity=1;"; 
 

 
console.log(encodeURIComponent(str.split(';').filter(a=>a).join('&')));

関連する問題