【问题标题】:How to get out a search result from forEach in an Object?如何从对象中的 forEach 中获取搜索结果?
【发布时间】:2019-09-11 04:53:23
【问题描述】:

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

this.state.status: [
  {id: 1, name: 'To-do'},
  {id: 2, name: 'In-progress'},
  {id: 3, name: 'Completed'},
]

当通过选择下拉列表中的菜单项更改状态时,我需要将状态 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);
                })
        );

    };

错误:'status_id' 未定义!

【问题讨论】:

    标签: javascript arrays reactjs object ecmascript-6


    【解决方案1】:

    因为您在函数内部的 if 语句中将 status_id 定义为块范围的常量 - 在该 if 语句之外无法访问它。你可以使用findObject.values 来代替解构(因为forEach 不返回任何东西):

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

    【讨论】:

    • 看起来他比较的是字符串,所以有什么理由让双等号而不是三等号?
    • 哎呀,对不起@wiesson,在 OP 的代码中没有看到,谢谢。
    • 我只是好奇它是否有我不知道的更深层次的含义:)
    • 不@wiesson - 严格相等=== 比较类型和值 - 所以0 !== "0",但是0 === 0。平等 == 只比较值,而不是类型,因此它转换类型 - 所以 0 == "0",但 0 == false 也是。
    猜你喜欢
    • 1970-01-01
    • 2020-06-27
    • 1970-01-01
    • 2012-04-10
    • 2016-07-12
    • 2011-06-26
    • 2018-03-24
    • 2012-03-24
    • 1970-01-01
    相关资源
    最近更新 更多