簡體   English   中英

如何從對象數組創建URL編碼的查詢字符串?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM