【问题标题】:SetState of an array数组的 SetState
【发布时间】:2020-04-16 05:17:24
【问题描述】:

我有一个具有数组的状态的对象。我想将该数组的IDs 的状态设置为该状态下的另一个空数组。我希望将 array1[1].team.id 推送到空数组 array2 并将状态设置为 true。我的代码:

this.state: {

    array1: [
        {id:1, team: [
            {id:1, name: 'name1a'},
            {id:2, name: 'name2a'},
            {id:3, name: 'name3a'}
        ]},

        {id:2, team: [
            {id:1, name: 'name1b'},
            {id:2, name: 'name2b'},
            {id:3, name: 'name3b'}
        ]},

        {id:3, team: [
            {id:1, name: 'name1c'},
            {id:2, name: 'name2c'},
            {id:3, name: 'name3c'}
        ]},
    ],

    array2: [

    ]

}

所以有了这个函数,我希望 array2 是:

array2: [
   {id:1, status:true},
   {id:2, status:true},
   {id:2, status:true}
]

我试过了:

updateArray = (id) => {     //consider id=1

    let array2 = [...this.state.array2];

    let newArray2 = [...this.state.array1[id].team.id, status:true];

    this.setState({
        array2: newArray2
    })

}

它没有工作。显然,做错了什么。我该怎么做?谢谢。

【问题讨论】:

  • 也没有...team.id,因为.team 是一个数组。为什么第二个数组顺便说一句?不能只将status: true 添加到第一个数组的团队对象中吗?
  • 为什么在预期的array2 中有两个带有id:2 的对象?请为array1 中的每个对象和team 数组中的对象创建不同的ID,并写出清晰的问题陈述。目前尚不清楚您要在 array2 中添加哪个 id
  • @adiga 假设我想添加数组 [1] id。
  • 请退后一步,描述一下最终目标是什么。像“我想要一个布尔值 status 为每个团队,并且能够根据我喜欢使用 setTeamStatus(id, newStatus) 之类的东西来更改它”
  • 如果array2 已经拥有(部分)id 怎么办?

标签: javascript arrays reactjs react-native ecmascript-6


【解决方案1】:

array1[id]上使用地图功能:

updateArray = id => {
    const array2 = this.state.array1[id].team.map(item => (
        {id: item.id, status: true}
    ));
    this.setState({array2})
}

我不知道您是否总是想替换array2 中的值,或者您需要在state 中创建多个新数组,具体取决于传递给上述函数的ids,例如@987654326 @、array3 等等?

更新:如果 id 与父数组的索引不同(如 adigaChris 建议的那样)

updateArray = id => {
    const arrayToConsider = this.state.array1.find(element => (
        element.id === id
    ));
    const array2 = arrayToConsider.team.map(item => (
        {id: item.id, status: true}
    ));
    this.setState({array2})
}

【讨论】:

  • 但是如何将它推送到数组 2?我在哪里把它放在函数中?
  • 据我所知,这似乎是 OP 正在寻找的解决方案。
  • array1[id] 假定 ids 与索引相同(它们不是)。 OP 可能想要const { team = [] } = this.state.array1.find(a => a.id === id) || {}; const array2 = team.map(...)
  • 如果key的顺序不变,也许可以在array1[id - 1]上调用map()方法,这样索引就和key一样了。但是,当其中一个元素被删除时,这将是一个问题。
  • 或使用find() 获取正确的团队数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-09
  • 2018-09-03
  • 1970-01-01
  • 2019-06-10
  • 2021-02-03
相关资源
最近更新 更多