0

我知道我可以将一个对象或数组解构为多个变量,无论它们都已分配还是未分配,但是当至少一个变量已经被声明时,是否可以一起重构多个变量,并且至少一个有没有?

1. 两者都未分配

这有效✅</p>

let [a, b] = [1, 2];

2. 均已分配

这也有效✅</p>

let a, b;
[a, b] = [1, 2];

3. 至少一项已分配,一项未分配

这不起作用

let a;
[a, b] = [1, 2]; // 
let [a, b] = [1, 2]; // 

我在这里使用的实际用例与此类似——我有一个 URL 路径,我想将其拆分为具有相同变量名及其查询字符串的路径(如果存在的话)。

这是我想做的,但出于同样的原因它不起作用。

let urlPath = '/some-path/some-page?parameter=value';

const getUrlParts = url => url.split('?');

[urlPath, urlQueryString] = getUrlParts(urlPath); // 

到目前为止,这是我提出的一些解决方法,但它们要么迫使我运行该函数两次,要么将单个赋值行分成三个单独的行,并声明一个新变量只是为了重新赋值:

解决方法 #1:执行函数两次

let urlPath = '/some-path/some-page?parameter=value';

const getUrlParts = url => url.split('?');

const urlQueryString = getUrlParts(urlPath)[1];
urlPath = getUrlParts(urlPath)[0];

解决方法 #2:声明临时变量

let urlPath = '/some-path/some-page?parameter=value';

const getUrlParts = url => url.split('?');

const urlSplitData = getUrlParts(urlPath);
// temporary variable created
property = urlSplitData[0];
const urlQueryString = urlSplitData[1];
// temporary variable no longer needed
4

1 回答 1

2

我不相信有一种方法可以解构为已定义和尚未定义的变量的组合。但好消息是您可以简单地提前定义您希望解构的所有变量:

let urlPath = '/some-path/some-page?parameter=value';
let urlQueryString = '';

const getUrlParts = url => url.split('?');

[urlPath, urlQueryString] = getUrlParts(urlPath);

请注意,这正是您第一次尝试的解决方案,除了我们urlQueryString在解构之前声明。

于 2021-06-01T20:51:05.213 回答