2011-01-11 48 views
8

是否有任何js函數將數組轉換爲urlencoded? 我完全新手ňJS ...謝謝!...將JavaScript數組轉換爲URL編碼


我的數組是一個關鍵&值數組.... 所以,

myData=new Array('id'=>'354313','fname'=>'Henry','lname'=>'Ford'); 

相同

myData['id']='354313'; 
myData['fname']='Henry'; 
myData['lname']='Ford'; 
myData.join('&'); //returns error, it doesn't work on such array... 

有沒有解決辦法?


哦索裏...... 我有這樣

var myData=new Array('id'=>'354313','fname'=>'Henry','lname'=>'Ford'); 

一個數組,然後我需要的數組轉換爲:

id=354313&fname=Henry&lname=Ford 
+0

你說的是URL編碼每個字符串數組中或將它們串聯成一個URL查詢字符串或.. ? – jerluc 2011-01-11 09:43:56

+0

Url編碼僅適用於字符串。如果你想將它應用到一個數組中,你首先需要解釋你的意思 - 你是否希望將數組連接成單個字符串?你想編碼單個數組元素嗎?你如何處理非字符串數組元素(如對象,函數或其他數組)?編輯你的問題至少包括一個你希望實現的例子(原始數組,生成的url編碼的字符串)是一個好主意。 – 2011-01-11 09:47:48

回答

9

你可以做這樣的事情:

var myData = new Array('id=354313', 'fname=Henry', 'lname=Ford'); 
var url = myData.join('&'); 
+1

我會`var url ='?' + myData.join('&');` – earthmeLon 2014-01-02 17:06:12

17

試試這個:

var myData = {'id': '354313', 'fname':'Henry', 'lname': 'Ford'}; 
var out = []; 

for (var key in myData) { 
    out.push(key + '=' + encodeURIComponent(myData[key])); 
} 

out.join('&'); 
1

從jgrunds兩者回答,如果你想擴展陣列功能

Array.prototype.toQueryString = function(){ 
    var out = new Array(); 

    for(key in this){ 
     out.push(key + '=' + encodeURIComponent(this[key])); 
    } 

    return out.join('&'); 
} 

或者,如果你想要一個獨立的功能

function arrayToQueryString(array_in){ 
    var out = new Array(); 

    for(var key in array_in){ 
     out.push(key + '=' + encodeURIComponent(array_in[key])); 
    } 

    return out.join('&'); 
} 
1

如果您使用的對象,而不是一個數組,你可以做到這一點(ES6):

var myData = { 
    id: 354313, 
    fname: 'Henry', 
    lname: 'Ford', 
    url: 'https://es.wikipedia.org/wiki/Henry_Ford', 
}; 

encodeDataToURL = (data) => { 
    return Object 
     .keys(data) 
     .map(value => `${value}=${encodeURIComponent(data[value])}`) 
     .join('&'); 
} 

console.log(encodeDataToURL(myData));