You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript解构赋值报错:重复声明‘hour’,如何解决?

解决解构赋值中重复声明变量的错误

这个报错原因很直白:你在同一个作用域里用const重复声明了hour和minute这两个变量——第一次从event.start_date_details解构时定义了它们,第二次从event.end_date_details解构又用了相同的变量名,JS不允许同一作用域内重复声明同一个const(或者let)变量。

结合你的Events JSON数据,给你几个可行的解决办法:

1. 给结束时间的变量重命名(最推荐)

直接在解构结束时间时,给变量起不同的名字,同时注意修正你代码里的一个小错误:你的JSON里分钟字段是minutes(带s),不是minute,之前的写法会导致变量拿到undefined。另外还要注意,你的JSON里start_date_details并没有startYear、startMonth这类字段,实际是year、month,之前的写法也会拿不到正确值。修正后的代码如下:

// 解构开始时间,匹配JSON实际字段
const { year, month, day, hour: startHour, minutes: startMinute } = event.start_date_details;
// 解构结束时间时重命名,避免变量冲突
const { hour: endHour, minutes: endMinute } = event.end_date_details;

2. 合并解构语句,一次性完成赋值

如果想更简洁,可以把两个对象的解构合并到同一个const声明里,这样自然不会有重复声明的问题:

const {
  start_date_details: { 
    year, 
    month, 
    day, 
    hour: startHour, 
    minutes: startMinute 
  },
  end_date_details: { 
    hour: endHour, 
    minutes: endMinute 
  }
} = event;

3. 用块级作用域隔离变量(特殊场景用)

如果一定要在代码里用相同的变量名,可以把其中一次解构放到单独的代码块中,利用块级作用域隔离变量(注意这里要用let,因为const在块级作用域里也不能重复声明):

const { year, month, day, hour: startHour, minutes: startMinute } = event.start_date_details;

// 用块级作用域包裹结束时间的解构
{
  let { hour: hour, minutes: minute } = event.end_date_details;
  // 在这里使用结束时间的hour和minute,不会和外部的变量冲突
  console.log('结束时间:', hour, minute);
}

内容的提问来源于stack exchange,提问作者Bomber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:46:30