如果JSON对象为空,则将空数组发布到API

时间:2019-08-20 09:52:21

标签: javascript arrays json reactjs post

我正在尝试将JSON对象发布到具有2个字段的API。但是,如果这些字段为空(即在表单上未输入任何值),我想发送一个空数组。

表单的这一部分允许两个票务选项:付费和免费,如果选择免费,则不会在这两个字段中输入任何值。

这是我的状态下pricingticketing选项的样子:

ticketing: ""       // this would be either 0 or 1
pricing: [
              {
                price: "",
                currency: "",
              }
            ],

这是我将其发送到我的API的方式:

const info = {
  ticketing: this.state.ticketing,
  price: [
              {
                currency: this.state.currency,
                price: this.state.price,
              }
            ],
  }

axios
     .post(`https://www.somewhere.com`, {
       info
     })

当没有为pricecurrency输入值时,表单过帐:

price: [{}]
  0: {}

我要发布:

price: []

相反,请让我知道我该怎么做。

我已更新答案,以显示API以单个常量接收数据。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

您可以使用pricefilter()数组中过滤出空对象。 这是一个示例:

prices = {
    price: [
        {
            currency: "USD",
            price: 5.0,
        }, {}
    ].filter(token => Object.keys(token).length != 0)
}
console.log(prices);

答案 1 :(得分:0)

如果您希望此过滤器仅在currencyprice时起作用,则可以使用filter方法删除所有没有这两个元素的元素:

axios.post(`https://www.somewhere.com`, {
  info: info.filter(inf => inf.currency && inf.price)
})

如果您希望info通过保留定义了任何值的对象来处理任何类型的对象,则可以对它们的值使用some方法:

axios.post(`https://www.somewhere.com`, {
  info: info.filter(inf => Object.values(inf).some(i => i))
})

答案 2 :(得分:-1)

const {currency, price} = this.state;
const pricing = {price: []}
if(currency && price) pricing.price.push({currency, price})

axios.post(`https://www.somewhere.com`, { pricing })