У меня есть данные из общедоступного API, и мне нужно извлечь годы из столбца в этом наборе данных.
Текст из этого столбца имеет разные форматы, поэтому предположим, что это такой массив:
var array = ['ca 1940', '4 October 1935', '1915', 'Undated', 'ca 1921', '5 September 1925']
Как я могу отфильтровать этот массив, чтобы получить такой массив:
var years = magical_method(array);
// years = ['1940', '1935', '1915', '1921', '1925']
// Remove strings which do not have years and extract years from strings which do have years
Любая помощь будет оценена по достоинству.
Обновлено: Я пробовал:
function removeUndated(year) {
if (year) {
return year.match(/[\d]{1}/);
}
}
чтобы удалить строку «Без даты», но у меня до сих пор нет идей, как извлечь годы из строк с разными форматами, как указано выше.
Обновлено ........
Годы всегда в конце? Если нет, попробуйте years.join("\n").match(/\b\d{4}\b/g), или, если да, попробуйте years.join("\n").match(/\b\d{4}$/gm).



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Кажется, что значение года будет последним словом строки, поэтому вы можете разделить его на пробелы, а затем получить последнее слово, чтобы проверить, является ли оно целым числом или нет, чтобы убедиться, что это действительно значение года.
var array = ['ca 1940', '4 October 1935', '1915', 'Undated', 'ca 1921', '5 September 1925'];
var res = [];
array.forEach((item) => {
var year = item.split(/\s+/).pop();
if (parseInt(year)){
res.push(year);
}
});
console.info(res);Спасибо, это работает. Однако просто интересно, как эта проблема может быть решена с помощью регулярного выражения, если год может быть где угодно в строках (год появляется один раз в строке)?
Вы можете использовать функцию уменьшения для создания массива, а в функции обратного вызова вы можете разделить текст и получить только последнее значение
var array = ['ca 1940', '4 October 1935', '1915', 'Undated', 'ca 1921', '5 September 1925'];
let x = array.reduce(function(acc, curr) {
let x = curr.split(' ');
if (!isNaN(x[x.length - 1])) {
acc.push(x[x.length - 1])
}
return acc;
}, [])
console.info(x)
Опубликованный вопрос, похоже, вообще не включает любая попытка для решения проблемы. StackOverflow ожидает, что вы попробуй сначала решить свою проблему, поскольку ваши попытки помогают нам лучше понять, чего вы хотите. Измените вопрос, чтобы показать, что вы пробовали, чтобы проиллюстрировать конкретную проблему, с которой вы столкнулись в минимальный воспроизводимый пример. Для получения дополнительной информации см. Как спросить и возьмите тур.