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

标签 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' },
}

最佳答案

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

let selection = {}

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

要解决此问题,您应该从您所在的州获取它,如下所示:

let selection = this.state.test

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

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

关于Javascript — 如何将多个元素分配给一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51808529/

相关文章:

javascript - 使用 Lodash 按键求和

reactjs - ×对象作为React子对象无效(找到: object with keys {author, quote}). If you meant to render a collection of children, use an array

sql - Oracle SQL,是否可以在嵌套选择中使用用户定义的数据类型属性?

javascript - 当鼠标悬停在 div 1 上时,取决于它是否在 div 2 上,它应该有不同的行为

javascript - 为什么 javascript 是唯一在浏览器中实现的客户端脚本语言?

c++ - 将结果存储在 C++ 中的 Map 中,然后对其进行迭代,然后打印出来?

python - 将python中的字典拆分为键和值

java - 声明子类对象

javascript - Controller 中ui-router的一个参数并解析

java - java中使用数组的字典