![](/img/trans.png)
[英]How can I map over and object, that contains another Object I want to map over and return JSX from it?
[英]How can I map over an object and set it to another object without overwriting the previous values?
我正在使用一个包含多个地址、ID 等部分的表单。我正在获取这些对象的值并将其映射到我的 API 可以理解的另一个对象。 我遇到的问题是,当我有两个以上的地址或 ID 时,我的函数会用我通过的最后一个地址或 ID 覆盖所有其他地址。
例如,我希望获取这些数据
data = {
question_11_address: "124 Aspen Rd",
question_12_city: "South Orange",
question_13_state: "NJ",
question_14_zip: "07052",
question_15_country: "USA",
question_11_address_copy_0: "123 Main St",
question_12_city_copy_0: "Jersey City",
question_13_state_copy_0: "NJ",
question_14_zip_copy_0: "07302",
question_15_country_copy_0: "USA",
question_11_address_copy_1: "110 Marrin St",
question_12_city_copy_1: "Hoboken",
question_13_state_copy_1: "NJ",
question_14_zip_copy_1: "07302",
question_15_country_copy_1: "USA",
}
转变为...
const finalAddresses = [
{
address: "124 Aspen Rd",
city: "South Orange",
state: "NJ",
zip: "07052",
country: "USA",
},
{
address: "123 Main St",
city: "Jersey City",
state: "NJ",
zip: "07302",
country: "USA",
}
{
address: "110 Marrin St",
city: "Hoboken",
state: "NJ",
zip: "07302",
country: "USA",
},
];
相反,我得到的是......
const finalAddresses = [
{
address: "124 Aspen Rd",
city: "South Orange",
state: "NJ",
zip: "07052",
country: "USA",
},
{
address: "110 Marrin St",
city: "Hoboken",
state: "NJ",
zip: "07302",
country: "USA",
},
{
address: "110 Marrin St",
city: "Hoboken",
state: "NJ",
zip: "07302",
country: "USA",
},
];
显然我正在用最后一个值覆盖我传递给我的函数的对象,但是我不确定如何修复它。 我尝试了很多方法,包括在再次调用我的函数之前将对象推送到我的数组,但我仍然遇到这个问题。 请查看我的代码框以获取完整代码。
您通过引用将同一对象传递给“生成”函数两次:
const addressObject = {};
const addressCounterArray = ... // [0,1];
const addressCopyArray = addressCounterArray.map((index) => {
return generateCorrectAddressFormat(index, addressObject, sectionAddress);
});
因此,您没有两个对象 - 它是完全相同的对象,两次包含在结果数组中,并且其值对应于您“生成”它的最后一个索引。 您可以通过运行console.log(finalAddresses[1] === finalAddresses[2])
来验证这一点。 ===
通过引用检查相等性,因此只有当它实际上是同一个对象时才会记录为true
,而不仅仅是具有相同值的两个对象。
相反,您实际上应该每次都使用一个新对象,例如通过执行以下操作:
const addressCopyArray = addressCounterArray.map((index) => {
return generateCorrectAddressFormat(index, {}, sectionAddress);
});
你的数据结构有点像噩梦。 它将来自不同记录的数据组合成一条记录。 话虽如此,您应该能够通过它们的“_copy_0”关键部分(或缺少它们)来提取各种记录。
此代码查找“question_11_address”+ 一些结尾。 一开始,结尾是空的,但在第一次迭代之后,它添加了“副本”和一个增加的数字。
data = { question_11_address: "124 Aspen Rd", question_12_city: "South Orange", question_13_state: "NJ", question_14_zip: "07052", question_15_country: "USA", question_11_address_copy_0: "123 Main St", question_12_city_copy_0: "Jersey City", question_13_state_copy_0: "NJ", question_14_zip_copy_0: "07302", question_15_country_copy_0: "USA", question_11_address_copy_1: "110 Marrin St", question_12_city_copy_1: "Hoboken", question_13_state_copy_1: "NJ", question_14_zip_copy_1: "07302", question_15_country_copy_1: "USA", } const output = []; let currentItem = ""; let currentItemNumber = 0; while (data["question_11_address" + currentItem]) { output.push({ address: data["question_11_address" + currentItem], city: data["question_12_city" + currentItem], state: data["question_13_state" + currentItem], zip: data["question_14_zip" + currentItem], country: data["question_15_country" + currentItem] }); currentItem = "_copy_" + currentItemNumber; currentItemNumber++; } console.log(output);
这是一个遍历数据对象值的解决方案,它仅在您的数据输入一致的情况下才有效,几乎可以肯定有更好的解决方案,但这可能会让您走上正轨
const data = { question_11_address: "124 Aspen Rd", question_12_city: "South Orange", question_13_state: "NJ", question_14_zip: "07052", question_15_country: "USA", question_11_address_copy_0: "123 Main St", question_12_city_copy_0: "Jersey City", question_13_state_copy_0: "NJ", question_14_zip_copy_0: "07302", question_15_country_copy_0: "USA", question_11_address_copy_1: "110 Marrin St", question_12_city_copy_1: "Hoboken", question_13_state_copy_1: "NJ", question_14_zip_copy_1: "07302", question_15_country_copy_1: "USA", }; const questionValues = Object.values(data); let resultArr = []; questionValues.forEach((val, index) => { if (index % 5 === 0) { resultArr.push({ address: questionValues[index], city: questionValues[index + 1], state: questionValues[index + 2], zip: questionValues[index + 3], country: questionValues[index + 4], }); } }); console.log(resultArr);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.