slate.js 示例中的以下代码片段在做什么?

What is the following code snippet from a slate.js example doing?

我试图通过查看 rich text example 来理解 Slate.js,但我遇到了以下代码片段,我不明白。

const isBlockActive = (editor, format) => {
    const [match] = Editor.nodes(editor, {
      match: n => n.type === format,
  })

  return !!match
}

我不是 javascript 方面的专家,而且我对 typescript 和 slate.js 都是新手,所以我提前为无法更好地表达我的问题而道歉,但这就是我的意思目前了解和不确定的地方:

(1) Editor.nodes() 是一种 return 可迭代的方法。 "const [match]" 表示法是什么?这是 javascript 还是打字稿?

(2)“const [match]”中的“match”与“match : n => n.type === format”中的“match”是否相同?如果是这样,是否意味着“const [match]”是一个数组,其中一个元素是一个函数?如果真是这样,那似乎很奇怪,那么为什么还要费心使 Editor.nodes() return 成为 Iterable 呢?

(3) 我知道双感叹号给了我一个布尔对象,但由于我无法理解 match 是一个函数还是一个可迭代对象还是其他东西,所以我不知道是真是假!!match 告诉我关于 Editor.nodes() 的初始迭代 return。

感谢您为我困惑的大脑提供的任何启发!

这就是所谓的数组解构match 是一个变量,它包含 Editor.nodes 函数返回的数组的第一个元素(或者更确切地说是迭代器产生的第一个值)。它几乎等于:

  const match = Editor.nodes(...)[0];

或者更准确地说:

 const _it = Editor.nodes(...)[Symbol.iterator]().next();
 const match = _it.done ? undefined : _it.value;

(1) Editor.nodes() is a method which returns an Iterable. What is the "const [match]" notation? Is this javascript or typescript?

它是 JavaScript(和 TypeScript)数组解构。 Editor.nodes returns 迭代创建数组的可迭代对象,并将该数组的第一个元素分配给 match。我们只对是否至少有一个匹配感兴趣,因此查看数组的第一个元素会告诉我们这一点。

(2) Is the "match" in "const [match]" the same as the "match" in "match : n => n.type === format"? If so, does that mean "const [match]" is an array with one element which is a function? It seems odd if that were the case as then why bother making Editor.nodes() return an Iterable at all?

这两个变量完全不同,可以(应该?)以不同的方式命名以使事情更清楚。 Editor.nodes() 是 Editor interface/API 的一部分,用于许多不同的事情。在这种情况下,我们只对第一个元素感兴趣。您可以使用它来查找并遍历 editor.children 中的所有节点,您的 match 函数 returns 为真。

(3) I know double exclamation points give me a Boolean object, but since I can't wrap my head around whether match is a function or an iterable or something else, I have no idea what the truth or falsity of !!match tells me about the initial iterable returned by Editor.nodes().

结果 match 是一个 节点对象 ,或者 undefined 如果它不匹配.一个对象是真实的,而未定义是虚假的,并且正在做!只是将其转换为布尔值。