Как результат массива `String.match` содержит индекс, группу и т. Д. c.,? - PullRequest
3 голосов
/ 17 января 2020

Мне просто стало интересно, как получается, что результат соответствия регулярному выражению в Javascript возвращает одномерный массив с ключевыми индексами?

var str = "We will";

const result = str.match(/wi/);

console.log(Array.isArray(result));
console.log(result.index);
console.log(result.input);

Здесь показано, как массив имеет строковые ключи («index», «input» и т. Д. c.,). Есть ли способ, как мы можем создать такой массив в Javascript?

Ответы [ 2 ]

6 голосов
/ 17 января 2020

Да, есть. Массивы - это просто повторяемые объекты в JavaScript. Состояния MDN :

Массивы - это объекты в виде списков, в прототипе которых есть методы для выполнения операций обхода и мутации.

Это означает, что вы можете просто назначить свойство. Будьте осторожны, чтобы случайно не перезаписать существующее свойство при этом:

const arr = [1, 2, 3];

arr.propName = 42;

console.log(
  ...arr,
  arr.propName
);
3 голосов
/ 17 января 2020

Из определения интерфейса ecmascript5 вывод совпадения будет RegExpMatchArray или null, где RegExpMatchArray определяется следующим образом

interface RegExpMatchArray extends Array<string> {
  index?: number;
  input?: string;
}

, если вам нужно сделать это в машинописном тексте, вы определяете интерфейс в точно так же и доступ / назначение свойств, как если бы вы обращались к объектам '

, если вам не нужна машинопись, вы можете пропустить часть интерфейса и просто сделать

const array = []

array.index = 1;
array.input = "test"

console.log(array.index, array.input)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...