Javascript —如何为一个对象分配多个元素?

时间:2018-08-12 11:46:26

标签: javascript dictionary object react-native

我试图将多个元素分配给一个对象而没有成功。数据被覆盖而不是添加。我对此并不陌生,因此不确定Object.assing()是否是正确的选择。如何向对象添加多组数据?

伪代码

  • 选择开始日期
  • 添加到对象
  • 选择结束日期
  • 添加到对象
  • 获取日期并添加到对象

代码

_selectDate = obj => {
    let selection = {}
    const { startDate, endDate } = this.state

    if (!startDate) {
        Object.assign(selection, {
            [obj.dateString]: { startingDay: true, color: 'black', textColor: 'white' },
        })
    } else {
        Object.assign(selection, {
            [obj.dateString]: { endingDay: true, color: 'black', textColor: 'white' },
        })
    }

    this.setState({
        startDate: !startDate,
        test: selection,
    })
}

需要的结果

{
    '2018-08-20': { startingDay: true, color: 'black', textColor: 'white' },
    '2018-08-21': { selected: true, color: 'black', textColor: 'white' },
    '2018-08-22': { selected: true, color: 'black', textColor: 'white' },
    '2018-08-04': { endingDay: true, color: 'black', textColor: 'white' },
}

1 个答案:

答案 0 :(得分:3)

在每次调用时创建新对象的问题:

let selection = {}

这就是为什么您无法“累积”此数据的原因。

要解决此问题,您应该从自己的州获得它,就像这样:

let selection = this.state.test

然后(在if语句中)进行赋值:

selection = {
   ...selection,
   [obj.dateString]: { 
      endingDay: true, 
      color: 'black', 
      textColor: 'white' 
   },
}