首页 > 解决方案 > 在另一个对象中访问不同对象的属性

问题描述

我有一个虚拟 api 响应,其中包含一个包含对象的结果数组。当我尝试映射此数组并尝试访问我正在创建的另一个对象中的每个对象的属性时,它会引发错误。知道有什么问题吗?

这是一个代码片段

import { result } from "./partnership_rewards_response.json";

result.map((partner,index)=>{
    const obj = {
        partner.name,
        partner.class
    }
})

这就是我的 json 文件的样子

{
"result":[obj1, obj2, ...]
}

我得到的错误是Parsing error: Unexpected token, expected ","

编辑:我忘了指定,我正在尝试使用 useState 填充内容。所以对象结构已经初始化为默认值

EDIT2:这是我试图填充它的方式

const [showModal, setModal] = useState(false);
const [modalContent, setModalContent] = useState({
    partner_name: "",
    coupon_image:"",
    coupon_code : "",
    coupon_content:"",
    terms:"",
    redemption_steps:"",
});

setModalContent(
{
partner.partner_logo,
partner.coupon_image
}
)

标签: javascript

解决方案


问题是您试图在对象字面量中使用速记属性表示法,但只有当属性值的来源是简单标识符(如example.)而不是属性表达式(如person.name. 当值的来源不仅仅是一个简单的标识符时,您必须使用“旧”(ES2015 之前)的完整属性语法 ( name: value) 来代替。

您需要明确给出属性名称:

result.map((partner,index)=>{
    const obj = {
        name: partner.name,
        class: partner.class,
    };
    // ...I assume there's more here...
})

或重新编辑(混淆您已更改属性名称):

setModalContent({
    partner_logo: partner.partner_logo,
    image: partner.image,
});

您也可以使用解构和属性简写符号来做到这一点:

result.map(({name, class},index)=>{
    const obj = {
        name,
        class,
    };
    // ...I assume there's more here...
})

或者重新编辑,如果你已经解构person,你可以这样做:

setModalContent({
    partner_logo,
    image,
});

推荐阅读