我只想将对象数组缩减为一个对象
I Just want to reduce array of object into one object
这是我的对象数组。
const [data, setData] = useState([
{ banner: "", intersitial: "", native: "", openVoice: "" },
{ banner: "", intersitial: "", native: "", openVoice: "" },
{ banner: "", intersitial: "", native: "", openVoice: "" },
]);
这也是我的提交方法
const handleSubmit = () => {
const bannerData = data.map((ele) => {
return ele.banner;
});
const nativeData = data.map((ele) => {
return ele.native;
});
const intersitialData = data.map((ele) => {
return ele.intersitial;
});
const openViaData = data.map((ele) => {
return ele.openVoice;
});
const newData = {
appId: id,
banner: bannerData,
intersitial: intersitialData,
native: nativeData,
openVia: openViaData,
};
axios
.post(`${url}/ads/create-ads`, newData)
.then((res) => {
console.log("res", res);
})
.catch((err) => {
console.log("error", err);
});
};
我使用了四个地图函数,然后将数据传入单个对象。
基本上我想要 1 个 reduce 方法
All in one reduce 方法应该是这样的:
const handleSubmit = () => {
const newData = data.reduce((prev, current) => ({
...prev,
banner: [...prev.banner, current.banner],
intersitial: [...prev.intersitial, current.intersitial],
native: [...prev.native, current.native],
openVia: [...prev.openVia, current.openVoice]
}), {
appId: id,
banner: [],
intersitial: [],
native: [],
openVia: [],
});
axios
.post(`${url}/ads/create-ads`, newData)
.then((res) => {
console.log("res", res);
})
.catch((err) => {
console.log("error", err);
});
};
您可以使用一些空数组传递初始值,并在 reduce 方法的每次迭代中填充它们。
这是我的对象数组。
const [data, setData] = useState([
{ banner: "", intersitial: "", native: "", openVoice: "" },
{ banner: "", intersitial: "", native: "", openVoice: "" },
{ banner: "", intersitial: "", native: "", openVoice: "" },
]);
这也是我的提交方法
const handleSubmit = () => {
const bannerData = data.map((ele) => {
return ele.banner;
});
const nativeData = data.map((ele) => {
return ele.native;
});
const intersitialData = data.map((ele) => {
return ele.intersitial;
});
const openViaData = data.map((ele) => {
return ele.openVoice;
});
const newData = {
appId: id,
banner: bannerData,
intersitial: intersitialData,
native: nativeData,
openVia: openViaData,
};
axios
.post(`${url}/ads/create-ads`, newData)
.then((res) => {
console.log("res", res);
})
.catch((err) => {
console.log("error", err);
});
};
我使用了四个地图函数,然后将数据传入单个对象。 基本上我想要 1 个 reduce 方法
All in one reduce 方法应该是这样的:
const handleSubmit = () => {
const newData = data.reduce((prev, current) => ({
...prev,
banner: [...prev.banner, current.banner],
intersitial: [...prev.intersitial, current.intersitial],
native: [...prev.native, current.native],
openVia: [...prev.openVia, current.openVoice]
}), {
appId: id,
banner: [],
intersitial: [],
native: [],
openVia: [],
});
axios
.post(`${url}/ads/create-ads`, newData)
.then((res) => {
console.log("res", res);
})
.catch((err) => {
console.log("error", err);
});
};
您可以使用一些空数组传递初始值,并在 reduce 方法的每次迭代中填充它们。