前端get请求参数转换问题

我需要将一个对象数组通过get请求发送出去,
数组格式如下:

voList: [
    {
        value: 'day',
        key: 'abc'
    },
    {
        value: 'month',
        key: 'bcd'
    }
]

需要转成成这样的格式
voList[0].value=day&voList[0].key=abc&voList[1].value=month&voList[1].key=bcd
请问我要怎么做转换才能实现这样的效果呢,尝试过qs.Stringify了。

阅读 5.3k
5 个回答

QS,看文档,在 stringify() 的时候加两个参数就对了:

const qs = require("qs");
const data = {
voList: [
    {
        value: 'day',
        key: 'abc'
    },
    {
        value: 'month',
        key: 'bcd'
    }
]
};

const querystring = qs.stringify(data, { encode: false, allowDots: true } );
console.log(querystring);
voList[0].value=day&voList[0].key=abc&voList[1].value=month&voList[1].key=bcd

如果后端改不了接收方法,那就自己实现个转换函数

let voList = [{
        value: 'day',
        key: 'abc',
    },
    {
        value: 'month',
        key: 'bcd',
    },
]

function formatDataToQs(data, qsName) {
    return data.reduce((p, c, index) => (Object.keys(c).forEach((key) => p.push(`${qsName}[${index}].${key}=${c[key]}`)), p), []).join("&")
}
let str = formatDataToQs(voList, 'voList')
console.log(str)
//voList[0].value=day&voList[0].key=abc&voList[1].value=month&voList[1].key=bcd

function normalizeQuery(list, name) {
  let result = [];

  list.forEach((item, index) => {

    for(key in item) {
      result.push(`${name}[${index}].${key}=${item[key]}`)
    }
  });

  return result.join("&")
}


console.log(normalizeQuery(voList, "voList"));

image.png
这个应该满足你的需求吧

const res = qs.stringify(
  {
    voList: [
      {
        value: 'day',
        key: 'abc',
      },
      {
        value: 'month',
        key: 'bcd',
      },
    ],
  },
  { encode: false, allowDots: true }
);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题