我有来自公共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}/);
}
}
删除“无日期”字符串,但是我仍然不知道如何从具有上述不同格式的字符串中提取年份。
答案 0 :(得分:1)
似乎年份值将是字符串的最后一个字,因此您可以将其与空格分开,然后获取最后一个字以检查它是否是整数,或者不满意它实际上是年份值
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.log(res);
答案 1 :(得分:0)
您可以使用reduce函数创建一个数组,而在回调函数中,您可以拆分文本并仅获取最后一个值
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.log(x)