检查对象是否可迭代

时间:2021-07-26 21:15:06

标签: javascript

const [, segment1, segment2] = "string".match(/([^/]+)\/(.*)/);

返回对象 null 不可迭代(无法读取属性 Symbol(Symbol.iterator))

const [, segment1, segment2] = "name/lastname".match(/([^/]+)\/(.*)/);
console.log(segment1, segment2)

如何检查是否可迭代?或者检查 segment1 和 segment2 是否都不是空/未定义?

3 个答案:

答案 0 :(得分:3)

您需要将 match 的结果分配给一个变量,以便在尝试使用捕获组之前测试匹配是否成功。

const match = "string".match(/([^/]+)\/(.*)/);
if (match) {
    const [, segment1, segment2] = match;
    console.log(segment1, segment2);
}

答案 1 :(得分:1)

如果字符串与正则表达式不匹配,则

astring.match(/re(g)e(x)/) 返回 null。并且您无法将 null 解构为对象或数组。

所以您可以执行以下操作

let [,a,b] = (astring.match(/re(g)e(x)/) || []);

即,如果 match 返回 null,则返回一个您可以解构的默认数组。那么 ab 都将是 undefined

答案 2 :(得分:1)

你也可以这样做:

const [fullMatch, segment1, segment2] = "string".match(/([^/]+)\/(.*)/)??[null];
if(fullMatch!==null) {
  console.log(segment1, segment2)
}

如果 match 未找到任何内容,则返回 null,如果是这种情况,您可以使用 ?? 运算符并使用 [null] 作为表达式的结果。

这样 fullMatch 将是一个字符串,如果匹配或 null 如果没有匹配发生。

但我仍然建议使用 Barmar 的答案,因为 segment1segment2 仅存在于 if 块中。

我展示的代码实际上只有在您使用 let 而不是 const 时才有意义,并且当您希望在找不到匹配项的情况下为这两个变量分配一些后备值时。

>