Ошибка JS: stringtime.match не является функцией? при попытке преобразовать длительность из строки "2h 3min" в числа - PullRequest
0 голосов
/ 25 октября 2019

Я написал этот код и подумал, что он был успешным. Однако, когда я запустил его в некоторых тестах, я получил результат «stringtime.match не является функцией».

Я пытаюсь написать код, в котором я создаю функцию turnHoursToMinutes (), которая получаетмассив в качестве параметра, и - заменяет информацию о продолжительности каждого из фильмов на его эквивалент в минутах. Мне также нужно будет вернуть новый массив со всей информацией о фильмах, то есть я не должен изменять исходный массив.

let movies = [
  {
    title: 'The Shawshank Redemption',
    year: '1994',
    director: 'Frank Darabont',
    duration: '2h 22min',
    genre: ['Crime', 'Drama'],
    rate: '9.3'
  },
  {
    title: 'The Godfather',
    year: '1972',
    director: 'Francis Ford Coppola',
    duration: '2h 55min',
    genre: ['Crime', 'Drama'],
    rate: '9.2'
  },
  {
    title: 'The Godfather: Part II',
    year: '1974',
    director: 'Francis Ford Coppola',
    duration: '3h 22min',
    genre: ['Crime', 'Drama'],
    rate: '9.0'
  }
]

function turnHoursToMinutes(minutesArr) {
  let durationArr = minutesArr.map(currentItem => {
    let stringtime = currentItem.duration;
    let strnumbers = stringtime.match(/\d+/g);
    let numbers = strnumbers.map(Number);
    let minutes = 0;
    if (stringtime.includes("h") && stringtime.includes("min")) {
      minutes = (numbers[0] * 60) + numbers[1];
    } else if (stringtime.includes("h")) {
      minutes = numbers[0] * 60;
    } else if (stringtime.includes("min")) {
      minutes = numbers[1];
    } 
    currentItem.duration = minutes;
    return {...currentItem};
  });

  return durationArr;

}
console.log(turnHoursToMinutes(movies));

Я искал решения в Интернете и пытался применить некоторые предложения к своему кодуно я не мог заставить его работать :( Кроме того, я думал, что я возвращаю новый массив, но я все еще получал ошибку, говоря, что я не возвращал новый массив ...

Я удостоверился, что stringtimeэто строка, как сказано в одном решении, но я все еще не могу заставить ее работать. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 25 октября 2019

Проверьте это , как сказано:

Метод match () извлекает результат сопоставления строки с регулярным выражением.

Так что если вы передадите что-нибудьчто это не строка или просто вы не помещаете объект со свойством duration, это выдаст вам ошибку.

Вы должны проверить, является ли let stringtime = currentItem.duration; нулевым или нет.

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