获取javascript上数组值空格后的字符

获取javascript上数组值空格后的字符,javascript,vue.js,Javascript,Vue.js,我有一个关于在空格后获取字符串字符的问题,其中字符串是数组的值,如下 arr = ['aaa: 2' , 'aaa: 5', 'aaa: 6', 3 , 7 , 8]; output = arr.filter(function (p) { if (!Number(p)) { // get string value return p.includes('aaa').split(' ').pop(); }

我有一个关于在空格后获取字符串字符的问题,其中字符串是数组的值,如下

arr = ['aaa: 2' , 'aaa: 5', 'aaa: 6', 3 , 7 , 8];

output = arr.filter(function (p) {
            if (!Number(p)) {  // get string value 
               return p.includes('aaa').split(' ').pop();
            }
         });

console.log(output)
我得到错误“TypeError:p.includes(…)。split不是一个函数”

如果我删除.split(“”).pop()

我只想要这样的输出

array [2,5,6]
有相同问题经验的人能帮我吗?我卡住了。 谢谢大家…

您可以使用:
const arr=['aaa:2','aaa:5','aaa:6',3,7,8];
常量输出=arr.reduce((acc,arrayValue)=>{
const[key,value]=arrayValue.toString().split(“:”);
if(关键字包括('aaa')){
acc.push(parseInt(值))
}
返回acc;
}, []);

log(输出)
创建一个对数字进行分组的正则表达式,然后将其提取出来

const regex = /aaa:\s(\d+)/
const matches = regex.exec(p)
return matches && matches.length > 0 && matches[0]
  • 返回布尔值,该值没有方法
    split

  • 采取:

  • 函数是一个谓词,用于测试数组的每个元素。返回 true保留该元素,否则为false

  • 对于您的任务,您需要另外使用
  • const arr=['aaa:2','aaa:5','aaa:6',3,7,8];
    常量输出=arr
    .filter((p)=>{
    返回编号(p)?错误:p.includes('aaa');
    })
    .map((p)=>Number(p.split(“”).pop());
    控制台日志(输出)函数仅用于过滤数组,无需修改。要组合修改和文件字符串,请改用reduce:

    const arr=['aaa:2','aaa:5','aaa:6',3,7,8];
    常量输出=arr.reduce((结果、电流)=>{
    如果(!Number(current)){//获取字符串值
    如果(当前包括('aaa')){
    返回[…结果,当前.split(“”).pop()];
    }
    }
    返回结果
    }, []);
    
    console.log(输出)
    看起来您需要阵列中的数字?使用
    Array.map
    和一点
    RegEx
    magic:

    console.log(
    stringify(['aaa:2','aaa:5','aaa:6',3,7,8]
    .map(v=>/:\s+\d$/.test(v)?编号(v.split(“:”[1]):v));
    //只有字符串中的数字?
    console.log(
    stringify(['aaa:2','aaa:5','aaa:6',3,7,8]
    .过滤器(v=>isNaN(+v))
    .map(v=>Number(v.split(“:”[1]))首先,.filter在这里使用的方法不正确,它要求使用true或false从数组中保留/删除给定项。改用.map

    其次,.includes返回true或false,因此尝试拆分布尔值将不起作用

    如果要删除上次编辑中提到的数字,请先筛选。试试这个:

    // first filter out numbers
    const output = arr.filter(function(p) {
        return !Number(p)
    }
    
    // then get the numbers out
    output = output.map(function(p) {
        if (p.includes('aaa')) { 
            return Number(p.split(' ').pop());
        }
    });
    
    再见,试试这个:

    var-arr=['aaa:2','aaa:5','aaa:6',3,7,8];
    console.log(arr.map(el=>{
    如果(类型el==“字符串”){
    返回parseInt(el.split(“:”[1]);
    }
    
    }).filter(el=>el!==undefined))
    如果值是字符串,则可以使用以下正则表达式提取空格后面的数字,例如

    /^\w+:\s(\d+)$/
    
    匹配组#1将是数字,您只需将其解析为整数

    const变换=(arr)=>
    arr.map(val=>typeof val=='string'
    ?parseInt(val.match(/^\w+:\s(\d+$/)[1],10)
    :val)
    log(转换(['aaa:2','aaa:5','aaa:6',3,7,8]))
  • filter方法仅有条件地返回 数组
  • 包含方法返回布尔类型值。因此,不能对布尔类型值使用split方法
  • 如果您想从主数组中获取自定义数组,那么可以使用reduce方法

    const arr=['aaa:2','aaa:5','aaa:6',3,7,8];
    常量输出=arr.reduce((值,键)=>{
    如果(!编号(键)&&key.包括('aaa')){
    value.push(parseInt(key.split(“”).pop());
    }
    返回值;
    }, []);
    
    控制台日志(输出)输出:数组['aaa:2','aaa:5','aaa:6']完美兄弟。。数组(3)[2,5,6]
    // first filter out numbers
    const output = arr.filter(function(p) {
        return !Number(p)
    }
    
    // then get the numbers out
    output = output.map(function(p) {
        if (p.includes('aaa')) { 
            return Number(p.split(' ').pop());
        }
    });