将数组解构为对象

Destructuring array into an object

我正在尝试在 javascript 中进行数组解构并遇到一些非常令人费解的行为

这是我的代码 --

 let res = {
            start: {},
            end: {},
        };
[res.start.hour, res.start.minute] = [7, 20]
[res.end.hour, res.end.minute] = [17, 30]
console.log(res)

输出为

{ start: { hour: 17, minute: 30 }, end: {} }

出于某种原因,[17, 30] 被分配给了 res.start,而不是 res.end。

此外,如果我添加如下 console.log 语句

 let res = {
            start: {},
            end: {},
        };
[res.start.hour, res.start.minute] = [7, 20]
console.log(JSON.stringify(res));
[res.end.hour, res.end.minute] = [17, 30]
console.log(res)

然后就可以了。 res.end 会得到正确的值。 输出——

{"start":{"hour":7,"minute":20},"end":{}}
{ start: { hour: 7, minute: 20 },
  end: { hour: 17, minute: 30 } }

我已经搜索并阅读了有关解构的 MDN 页面,但找不到对此的解释。 提前感谢您的帮助。

试试这个:

let res = {
  start: {},
  end: {}
};
[res.start.hour, res.start.minute] = [7, 20]; // Notice the semicolons.
[res.end.hour, res.end.minute] = [17, 30];
console.log(res);

我将您的代码从第一个块复制粘贴到 VS Code 中并使用了 'Alt + Shift + F'(自动格式化)。它将代码固定为以下内容,表明明显有问题:

let res = {
  start: {},
  end: {}
};
[res.start.hour, res.start.minute] = [7, 20][(res.end.hour, res.end.minute)] = [
  17,
  30
];
console.log(res);

事实证明,分号有时在 JavaScript 中很重要。