[英]How can I create a URL encoded query string from an array of objects?
我找到了很多例子,說明如何將對象的鍵/值轉換為URL編碼的查詢字符串,但是我需要使用對象數組並將其轉換為查詢字符串。
我想使用純JS或lodash來完成此任務。
我以這種格式提供了一組對象:
[
{ points: "30.09404881287048,-96.064453125" },
{ points: "30.09404881287048,-94.63485717773439" },
{ points: "29.345072482286373,-96.064453125" },
{ points: "29.345072482286373,-94.63485717773439"}
]
我需要采用以下格式:
points=30.09404881287048%2C-96.064453125&points=30.09404881287048%2C-94.63485717773439&points=29.345072482286373%2C-96.064453125&points=29.345072482286373%2C-94.63485717773439
我目前正在使用以下兩種方法來完成此任務:
import { map as _map } from 'lodash';
const createQueryStringFromObject = object =>
_map(object, (value, key) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
.join('&');
const createQueryStringFromArray = array => array.reduce((queryString, object, index) => {
return queryString + createQueryStringFromObject(object) + (index < array.length - 1 ? '&' : '');
}, '');
我發現reduce
函數的實現很草率,我認為它可能更干凈,更高效。 有什么建議么?
編輯:我想保持方法的通用性,以便它可以接受具有任何鍵的對象數組,而不僅僅是特定的鍵points
。 我還想保留createQueryStringFromObject()方法,因為我在網站上的其他地方都需要它。
我喜歡您的解決方案,但我認為僅使用內置的原型方法就可以清理代碼:
list.map(p => `points=${encodeURIComponent(p.points)}`).join('&')
導致
"points=30.09404881287048%2C-96.064453125&points=30.09404881287048%2C-94.63485717773439&points=29.345072482286373%2C-96.064453125&points=29.345072482286373%2C-94.63485717773439"
我正在尋找一個通用的實現,該實現不特定於包含points
關鍵的任何對象。 感謝melpomene建議只使用另一張地圖並加入,我給了那張照片,我當然更喜歡這種格式。 更短更清晰!
const createQueryStringFromArray = array =>
_map(array, object => createQueryStringFromObject(object))
.join('&');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.