如何从对象中的forEach中获取搜索结果?

Dav*_*hns 0 javascript arrays object ecmascript-6 reactjs

我有一个带有一些JSON数据的React应用程序。我有一个下拉菜单,用于在我的应用程序中为工作设置状态。我有一个名为status的状态,其中包含其ID的加载状态,如下所示。

this.state.status: [
  {id: 1, name: 'To-do'},
  {id: 2, name: 'In-progress'},
  {id: 3, name: 'Completed'},
]
Run Code Online (Sandbox Code Playgroud)

通过在下拉列表中选择菜单项来更改状态时,我需要将状态ID发送到API。因此,我将使用所选状态设置下拉列表的值,并在状态对象中按状态名称查找状态ID,并获取特定的ID。这是到目前为止我尝试过的。问题是,API调用无法捕获状态ID。控制台显示“ status_id未定义”

statusHandleChange = event => {
        const project_id = this.props.projectData.id;
        const job_id = this.props.projectData.currentJobId;

        this.setState({ currentStatus: event.target.value }, () =>
            Object.keys(this.state.status).forEach((key) => {
                if (this.state.status[key].name === event.target.value) {
                    const status_id = (this.state.status[key].id)
                }
            }),

            API.post('job/change_current_status', { project_id, job_id, status_id })
                .then(({ data }) => {
                    console.log("success!", data)
                })
                .catch((err) => {
                    console.log("AXIOS ERROR: ", err);
                })
        );

    };
Run Code Online (Sandbox Code Playgroud)

错误:未定义“ status_id”!

Jac*_*ord 5

因为您status_id在函数内的if语句内定义为块范围内的常量-在该语句外无法访问它if。您可以改用findObject.values与解构(因为forEach不返回任何内容):

const { id: status_id } = Object.values(this.state.status).find(({ name }) => name === event.target.value);
Run Code Online (Sandbox Code Playgroud)

  • 不,@ wiesson-严格相等的“ ===”比较类型和值-因此,“ 0!==“ 0”`,但`0 === 0`。等于“ ==”仅比较值而不是类型,因此它转换类型-所以“ 0 ==“ 0”`,但也'0 == false”。 (2认同)