我正在尝试将JSON对象发布到具有2个字段的API。但是,如果这些字段为空(即在表单上未输入任何值),我想发送一个空数组。
表单的这一部分允许两个票务选项:付费和免费,如果选择免费,则不会在这两个字段中输入任何值。
这是我的状态下pricing
和ticketing
选项的样子:
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
})
当没有为price
和currency
输入值时,表单过帐:
price: [{}]
0: {}
我要发布:
price: []
相反,请让我知道我该怎么做。
我已更新答案,以显示API以单个常量接收数据。
感谢您的帮助!
答案 0 :(得分:0)
您可以使用price
从filter()
数组中过滤出空对象。
这是一个示例:
prices = {
price: [
{
currency: "USD",
price: 5.0,
}, {}
].filter(token => Object.keys(token).length != 0)
}
console.log(prices);
答案 1 :(得分:0)
如果您希望此过滤器仅在currency
和price
时起作用,则可以使用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 })