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

标签 javascript arrays reactjs object ecmascript-6

我有一个带有一些 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”未定义!

最佳答案

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

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

关于javascript - 如何从对象中的 forEach 中获取搜索结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786901/

相关文章:

javascript - 正则表达式捕获并替换 html 标签之外的文本模式

javascript - Angularjs 输入字段为空或未验证

java - 我应该使用哪种类型的数组

javascript - 如何在排除句点的同时替换字符串中的非数字字符?

javascript - set array = 多维对象数组的一维值

javascript - 如何从发送电子邮件中删除特定数据

javascript - 使用 .sub() 和 react 创建化学式

reactjs - 如何在 react 中删除或处理图标被重新注册的警告?

javascript - Webpack + React : reusable component is not defined

javascript - 如何将 ScrollView 与嵌套的 FlatList 一起使用?