如何仅修改数组对象中第二层(name为Pear)的isFavorite值
问题排查与修正
原代码的核心问题:
- 属性访问错误:你用了
fruit[1].attributes,但map循环里的每一项fruit是数组中的单个对象(比如{name: "apple", attributes: [...]}),并非数组,fruit[1]会返回undefined,导致无法正确获取attributes甚至报错。 - 缺少条件判断:没有针对
name === "Pear"的场景做区分,导致所有水果的attributes里的isFavorite都被修改了。
修正后的代码:
const fruitChecked = fruits.map((fruit) => { // 仅针对name为"Pear"的水果修改属性 if (fruit.name === "Pear") { return { ...fruit, attributes: fruit.attributes.map((attribute) => ({ ...attribute, isFavorite: true })) }; } // 其他水果直接返回浅拷贝,避免修改原数组 return { ...fruit }; });
逻辑说明:
- 用
map遍历水果数组,对每个对象做判断:- 若当前水果
name为"Pear",则拷贝该对象,并遍历其attributes数组,将每个属性对象的isFavorite设为true。 - 若不是
"Pear",则返回原对象的浅拷贝,既不修改原数组,也保留其他水果的原有属性。
- 若当前水果
内容的提问来源于stack exchange,提问作者Javascript Learner
相关产品推荐
相关产品推荐

