如何在不改变状态的情况下向具有匹配条件的对象添加新键?
How to add new keys to the object with matching condition without mutating the state?
我有一组看起来像这样的对象
foodNutrients: Array(85)
{nutrientId: 1008, nutrientName: "Energy", unitName: "KCAL" value: 400,}
...
我想映射所有对象并检查每个对象 nutrientName
如果它匹配特定关键字我想用我的 excel [=27= 中的相应关键字重命名键] 并保存它的值。
在这种情况下,结果将是 Energy_100g: 400
。
然后我想遍历剩余的 85 个对象并将它们全部添加到下面的状态。
const [convertedIngredients, setConvertedIngredients] = useState({
product_name: "",
nutriments: {},
serving_size: "",
serving_quantity: "",
});
selectedItem.foodNutrients.map((foodNutrient) => {
switch (foodNutrient.nutrientName) {
case "Energy":
setConvertedIngredients((prev) => ({
...prev,
nutriments: {
Energy_100g: foodNutrient.value,
},
}));
break;
plus another 100+ cases
我希望我的状态 nutriments
对象填充 85 个新键,但我只得到 1 个,因为每个循环都会覆盖它。
这可能有助于解决您的问题。
selectedItem.foodNutrients.map((foodNutrient) => {
switch (foodNutrient.nutrientName) {
case "Energy":
setConvertedIngredients((prev) => ({
...prev,
nutriments: {
...prev.nutriments,
Energy_100g: foodNutrient.value,
},
}));
break;
但即使在这种情况下,您也必须记住,对象中的每个键都必须是唯一的,如果您尝试插入一个副本,它会写入现有的键。或者如果您希望同一键下有多个值,您也可以这样做。
selectedItem.foodNutrients.map((foodNutrient) => {
switch (foodNutrient.nutrientName) {
case "Energy":
setConvertedIngredients((prev) => prev.nutriments.hasOwnProperty('Energy_100g') ? {
...prev,
nutriments: {
...prev.nutriments,
Energy_100g: [...prev.nutriments.Energy_100g, foodNutrient.value],
},
} : {
...prev,
nutriments: {
...prev.nutriments,
Energy_100g: [foodNutrient.value],
},
});
break;
请原谅并忽略以上任何导致语法错误的拼写错误。
干杯,
我有一组看起来像这样的对象
foodNutrients: Array(85)
{nutrientId: 1008, nutrientName: "Energy", unitName: "KCAL" value: 400,}
...
我想映射所有对象并检查每个对象 nutrientName
如果它匹配特定关键字我想用我的 excel [=27= 中的相应关键字重命名键] 并保存它的值。
在这种情况下,结果将是 Energy_100g: 400
。
然后我想遍历剩余的 85 个对象并将它们全部添加到下面的状态。
const [convertedIngredients, setConvertedIngredients] = useState({
product_name: "",
nutriments: {},
serving_size: "",
serving_quantity: "",
});
selectedItem.foodNutrients.map((foodNutrient) => {
switch (foodNutrient.nutrientName) {
case "Energy":
setConvertedIngredients((prev) => ({
...prev,
nutriments: {
Energy_100g: foodNutrient.value,
},
}));
break;
plus another 100+ cases
我希望我的状态 nutriments
对象填充 85 个新键,但我只得到 1 个,因为每个循环都会覆盖它。
这可能有助于解决您的问题。
selectedItem.foodNutrients.map((foodNutrient) => {
switch (foodNutrient.nutrientName) {
case "Energy":
setConvertedIngredients((prev) => ({
...prev,
nutriments: {
...prev.nutriments,
Energy_100g: foodNutrient.value,
},
}));
break;
但即使在这种情况下,您也必须记住,对象中的每个键都必须是唯一的,如果您尝试插入一个副本,它会写入现有的键。或者如果您希望同一键下有多个值,您也可以这样做。
selectedItem.foodNutrients.map((foodNutrient) => {
switch (foodNutrient.nutrientName) {
case "Energy":
setConvertedIngredients((prev) => prev.nutriments.hasOwnProperty('Energy_100g') ? {
...prev,
nutriments: {
...prev.nutriments,
Energy_100g: [...prev.nutriments.Energy_100g, foodNutrient.value],
},
} : {
...prev,
nutriments: {
...prev.nutriments,
Energy_100g: [foodNutrient.value],
},
});
break;
请原谅并忽略以上任何导致语法错误的拼写错误。 干杯,