javascript - 仅最后一项添加到映射函数内的数组中

标签 javascript arrays reactjs concatenation

我正在映射函数内映射一个数组,并且我想将数组内每个元素的 id 添加到一个状态。我面临的问题是,即使控制台日志显示函数迭代到正确的次数,也仅将最后一项添加到数组中。

这是我写的代码

const { evc } = this.props;
evc.chargingStationGroups && evc.chargingStationGroups.map((item, key) => {
    item.stations.map((stationItem, key) => {
        console.log("stationID ",stationItem.stationID);
        var stationId = {};
        stationId = {
            stationId: stationItem.stationID
        }
        var allIdArray = this.state.stationIdArray.concat(stationId);
        this.setState({ stationIdArray: allIdArray })
    })
})

这里evc.chargingStationGroups是这样的

[
     {
      groupId: "16",
      groupName: "Sia",
      stations: [{stationId: "8", name: "Test"},{stationId: "9", name: "Test2"},{stationId: "10", name: "Test3"}]
     },
     {
      groupId: "17",
      groupName: "Maroon5",
      stations: [{stationId: "10", name: "Test"},{stationId: "11", name: "Test2"},{stationId: "10", name: "Test3"}]
     }
],

如何将所有 stationItem.stationID 添加到我的数组中,而不仅仅是最后一个。

最佳答案

仅在所有渲染中调用 setState 一次(因为 setState 是异步的)

假设你在chargingStationGroups之间没有重复的站点,只需将每个人连接起来即可

const { evc } = this.props;
if (evc.chargingStationGroups) {
    const ids = evc.chargingStationGroups.flatMap((item, key) => {
        return item.stations.map((stationItem, key) => {
            return {
                stationId: stationItem.stationID
            }
        })
    })
    const stationIdArray = this.state.stationIdArray.concat(ids)
    this.setState({ stationIdArray })
})

否则就避免上当受骗...

const { evc } = this.props;
if (evc.chargingStationGroups) {
    const ids = evc.chargingStationGroups.flatMap((item, key) => {
        return item.stations.map((stationItem, key) => {
            return {
                stationId: stationItem.stationID
            }
        })
    })
    const arr = this.state.stationIdArray.concat(ids)
    const s = new Set(arr.map(x => x.stationID))

    const stationIdArray = [...s].map(stationId => ({ stationId }))
    this.setState({ stationIdArray })
})

未测试,因为没有给出最小的可重现示例,但您明白了...

关于javascript - 仅最后一项添加到映射函数内的数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59451955/

相关文章:

javascript - 如何记录现有的 nodejs API?

javascript - 在 JavaScript 中使用 Processing 的 loadImage

arrays - ruby 将字符串拆分为数组,然后将数组元素拆分为单词

javascript - 从 2 个数组中的 1 个构建的 React .map

javascript - 如何让延迟处理程序将值返回给调用函数?

javascript - Meteor 从模式定义的表单中获取数据

javascript - JS:遍历对象的子对象,检查是否<b,由子对象的子字符串解析

php - 如何通过循环将php数组中对象的值写入mysql

javascript - 当窗口宽度小于 600px 时,如何禁用 MUI 网格元素堆叠

javascript - 在 React 应用程序中渲染外部网页