【问题标题】:Targeting nested object properties inside an parent object定位父对象内的嵌套对象属性
【发布时间】:2019-07-22 05:30:11
【问题描述】:

我正在尝试在多天内更改打开/关闭时间的状态(以及发布到端点的状态),这些状态会以这样的对象返回给我:

我已经在一个 React 组件中渲染了这些:

{this.state.time.map(each => (
    <Fragment key={each.code}>
        <OpeningHours
            code={each.code}
            day={each.description}
            name={each.code}
            open={each.open !== null ? each.open : '00:00'}
            close={each.close !== null ? each.close : '00:00'}
            onChange={this.onTimeChange}
        />
    </Fragment>
))}

如何遍历对象数组,直到找到this 天的开始时间或结束时间的索引?到目前为止,我已经尝试过这个,它有效,但前提是只有一个开放时间或一个一般领域。出现问题是因为我有 2 个字段要编辑:

onTimeChange(e) {
  let inputs = this.state.inputs.slice();
  for(let i in inputs){
      if(inputs[i].name == event.target.name){
          inputs[i].value = event.target.value;
          this.setState ({inputs});
          break;
      }
  }
}

【问题讨论】:

标签: javascript reactjs ecmascript-6


【解决方案1】:
 const newInputs = inputs.map(p =>

      p.name === <unique_name/code>
        ? { ...p, [e.target.name]: e.target.value }
        : p
    );
    this.setState({inputs:newInputs,});

更改onTimeChange()方法获取unique_name:onTimeChange(e, code)

一个简单的例子:https://codesandbox.io/s/v1y14rl2oy

由于索引是唯一的,你可以这样做

inputs[index] = { ...inputs[index], [e.target.name]: e.target.value } 也不像在沙盒中那样使用map()

【讨论】:

  • 有趣。没想到用.filter()。这看起来如何设置状态语法?我会假设我需要通过使用传播来创建当前状态的副本?现在,这会返回一个空数组:const times = this.state.time; const results = times.filter(time =&gt; time.code === e.target.value); console.log(results);
  • 我面临的问题见上文
  • 认为我误解了这个问题。所以你想找到具有特定 input.name 的数组,然后更改具有该名称的对象的相关字段或什么?
  • 开盘时间和闭盘时间都是可编辑的,并且全天对象都有一个开盘和收盘属性(全天对象嵌套在另一个名为 opening_hours 的对象中),这些属性被命名为 open 和 @ 987654330@ 见上面记录对象的截图。我需要能够每天分别编辑打开和关闭,并将新状态设置为说,如果我编辑(通过用户输入)Tuesdayopen 到 05:00,那么它会将状态更改为,什么它是以前的,但只是将tues open 更改为 05:00。
  • 绝对非常接近,只是在您的list 对象中您添加了name=name0 name=name1 等,而我的对象code 属性没有返回其索引。 @Asteriscus
猜你喜欢
  • 2021-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-20
  • 1970-01-01
  • 2015-10-25
  • 2022-10-14
相关资源
最近更新 更多