Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检测数组是否具有年值并定义它?_Javascript_Arrays_Node.js - Fatal编程技术网

Javascript 如何检测数组是否具有年值并定义它?

Javascript 如何检测数组是否具有年值并定义它?,javascript,arrays,node.js,Javascript,Arrays,Node.js,以下是示例阵列: [ 'test', '1994', 'test', 'test', '2018'] 我需要的是示例阵列中的两个阵列: [ 'test', 'test', 'test' ] 及 我尝试使用indexOf,但我无法通过具有所有可能年份值的数组(~1900至今/2018年) 我知道什么switch station会起作用,但是会有很多复制粘贴的代码,我相信有更好的方法 编辑: 你们中的一些人不明白我想得到的是什么年值而不仅仅是一个数字,所以用正则表达式的答案最接近我想要的,我只是

以下是示例阵列:

[ 'test', '1994', 'test', 'test', '2018']
我需要的是示例阵列中的两个阵列:

[ 'test', 'test', 'test' ]

我尝试使用
indexOf
,但我无法通过具有所有可能年份值的数组(~1900至今/2018年)

我知道什么
switch station
会起作用,但是会有很多复制粘贴的代码,我相信有更好的方法

编辑:


你们中的一些人不明白我想得到的是什么年值而不仅仅是一个数字,所以用正则表达式的答案最接近我想要的,我只是在谷歌搜索到
^(19 | 20)\d{2}$
后替换正则表达式。因此,年份可能只有1900-2099年。

您可以将阵列减少为两个单独的阵列。检查字符串是否可以铸造到1900-2018之间的数字,以及其计算结果是否为:

  • false
    -强制转换为0,并推送到第一个子数组
  • true
    -强制转换为1,并推送到第二个子数组
  • 然后,可以使用数组分解获得这两个数组

    const arr=['test','1994','test','test','test','2018'];
    常量isYear=(n)=>n>=1900&&n{
    r[+isYear(+s)]。推送;
    返回r;
    }, [[], []]);
    控制台日志(测试);
    
    对数(年)您可以使用正则表达式执行此操作:

    var arr = [ 'test', '1994', 'test', 'test', '2018'];
    var dates = [];
    var nonDates = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].match(/^\d{4}$/))
            dates.push(arr[i]);
        else
            nonDates.push(arr[i]);
    }
    
    var arr=[‘测试’、‘1994’、‘测试’、‘测试’、‘2018’];
    var日期=[];
    var非日期=[];
    对于(变量i=0;i
    您可以使用函数
    reduce
    根据字符串的内容对字符串进行分组

    让arr=[‘测试’、‘1994’、‘测试’、‘测试’、‘2018’],
    isYear=(s)=>!isNaN(编号(s.trim()),
    结果=arr.reduce((a,s)=>{
    如果(年)a.年推送;
    否则a.线。推;
    返回a;
    },{年:[],字符串:[]});
    控制台日志(结果)
    
    .as console wrapper{max height:100%!important;top:0;}
    您可以检查
    isNaN
    并将值推送到文本数组的任意一个数字

    var数组=['test','1994','test','test','2018'],
    text=[],
    数字=[];
    array.forEach(s=>[numbers,text][+/^(19 | 20)\d{2}$/.test].push(s));
    console.log(文本);
    控制台日志(编号)您也可以与检查一起使用来完成此操作

    var数组=['test','1994','test','test','2018'];
    var text=array.filter(e=>isNaN(e)),
    years=array.filter(e=>!isNaN(e));
    console.log(文本);
    
    对数(年)
    @Ele,你指的是哪一部分?它是一个属性访问器,通过使用一元
    加号
    isNaN
    的布尔值检查结果来获取数值。聪明的解决方案。我喜欢!cleaver和short,但不完全是我想要的,请阅读后期编辑。您可以使用正则表达式而不是
    isNaN
    。谢谢,这正是我想要的。
    var arr = [ 'test', '1994', 'test', 'test', '2018'];
    var dates = [];
    var nonDates = [];
    for (var i = 0; i < arr.length; i++) {
        if (arr[i].match(/^\d{4}$/))
            dates.push(arr[i]);
        else
            nonDates.push(arr[i]);
    }