如何在javascript中的许多字符串中选择数字字符串(仅包含数字的字符串),而忽略其余字符串?

如何在javascript中的许多字符串中选择数字字符串(仅包含数字的字符串),而忽略其余字符串?,javascript,Javascript,如何选择数值元素以及如何忽略字母元素(在本例中为“2009-10”:“NA”、“2010-11”:“NA”) stateData:[{“1999-00”:“125236”, "2000-01": "140119", "2001-02": "151482", "2002-03": "163385", "2003-04": "184463", "2004-05": "202575", "2005-06": "239683", "2006-07": "277286", "2007-08": "326

如何选择数值元素以及如何忽略字母元素(在本例中为“2009-10”:“NA”、“2010-11”:“NA”)

stateData:[{“1999-00”:“125236”,
"2000-01": "140119",
"2001-02": "151482",
"2002-03": "163385",
"2003-04": "184463",
"2004-05": "202575",
"2005-06": "239683",
"2006-07": "277286",
"2007-08": "326547",
"2008-09": "377346",
“2009-10”:“不适用”,

“2010-11”:“NA”}]
尝试
映射
和内部,获取对象的条目,然后过滤与数字正则表达式不匹配的条目
/\d+/
。大概是这样的:

var stateData=[{“1999-00”:“125236”,“2000-01”:“140119”,“2001-02”:“151482”,“2002-03”:“163385”,“2003-04”:“184463”,“2004-05”:“202575”,“2005-06”:“239683”,“2006-07”:“277286”,“2007-08”:“326547”,“2008-09”:“377346”,“2009-10”:“NA”,“2010-11”:“NA”};
var result=stateData.map(p=>Object.fromEntries(Object.entries(p).filter([k,v])=>v.match(/\d+/));

控制台日志(结果)
尝试
映射
和内部,获取对象的条目,然后过滤与数字regex不匹配的条目
/\d+/
。大概是这样的:

var stateData=[{“1999-00”:“125236”,“2000-01”:“140119”,“2001-02”:“151482”,“2002-03”:“163385”,“2003-04”:“184463”,“2004-05”:“202575”,“2005-06”:“239683”,“2006-07”:“277286”,“2007-08”:“326547”,“2008-09”:“377346”,“2009-10”:“NA”,“2010-11”:“NA”};
var result=stateData.map(p=>Object.fromEntries(Object.entries(p).filter([k,v])=>v.match(/\d+/));

控制台日志(结果)
您可以使用简单的正则表达式
/^\d+$/
检查字符串值是否只有数字。如果值通过正则表达式,则可以选择它,如果失败,则忽略它

let result = stateData.map(value => {
    const temp = {};
    for(var key in value) {
        if(/^\d+$/.test(value[key])
         temp[key] = value[key]
    }
    return temp;
}

//result array will have all the values which are numbers
console.log(result);

可以使用简单的正则表达式
/^\d+$/
检查字符串值是否只有数字。如果值通过正则表达式,则可以选择它,如果失败,则忽略它

let result = stateData.map(value => {
    const temp = {};
    for(var key in value) {
        if(/^\d+$/.test(value[key])
         temp[key] = value[key]
    }
    return temp;
}

//result array will have all the values which are numbers
console.log(result);

您可以这样做(使用
/^\d+$/
测试它是否都是数字):

const stateData=[{
"1999-00": "125236",
"2000-01": "140119",
"2001-02": "151482",
"2002-03": "163385",
"2003-04": "184463",
"2004-05": "202575",
"2005-06": "239683",
"2006-07": "277286",
"2007-08": "326547",
"2008-09": "377346",
“2009-10”:“不适用”,
“2010-11”:“NA3”
}]
console.log(stateData.map(
x=>
Object.fromEntries(Object.entries(x).filter(([\uu,val])=>/^\d+$/.test(val)))

))
您可以这样做(使用
/^\d+$/
测试它是否都是数字):

const stateData=[{
"1999-00": "125236",
"2000-01": "140119",
"2001-02": "151482",
"2002-03": "163385",
"2003-04": "184463",
"2004-05": "202575",
"2005-06": "239683",
"2006-07": "277286",
"2007-08": "326547",
"2008-09": "377346",
“2009-10”:“不适用”,
“2010-11”:“NA3”
}]
console.log(stateData.map(
x=>
Object.fromEntries(Object.entries(x).filter(([\uu,val])=>/^\d+$/.test(val)))
))
您可以使用
isNaN()
检查值是否为数字

var stateData=[{
"1999-00": "125236",
"2000-01": "140119",
"2001-02": "151482",
"2002-03": "163385",
"2003-04": "184463",
"2004-05": "202575",
"2005-06": "239683",
"2006-07": "277286",
"2007-08": "326547",
"2008-09": "377346",
“2009-10”:“不适用”,
“2010-11”:“不适用”
}]
var result=stateData.map(p=>Object.fromEntries(Object.entries(p.filter)([k,v])=>!(isNaN(vЮЮЮ));
console.log(result)
您可以使用
isNaN()
检查值是否为数字

var stateData=[{
"1999-00": "125236",
"2000-01": "140119",
"2001-02": "151482",
"2002-03": "163385",
"2003-04": "184463",
"2004-05": "202575",
"2005-06": "239683",
"2006-07": "277286",
"2007-08": "326547",
"2008-09": "377346",
“2009-10”:“不适用”,
“2010-11”:“不适用”
}]
var result=stateData.map(p=>Object.fromEntries(Object.entries(p.filter)([k,v])=>!(isNaN(vЮЮЮ));

console.log(result)
这是最短的,请尝试

let stateData=[{“1999-00”:“125236”,
"2000-01": "140119",
"2001-02": "151482",
"2002-03": "163385",
"2003-04": "184463",
"2004-05": "202575",
"2005-06": "239683",
"2006-07": "277286",
"2007-08": "326547",
"2008-09": "377346",
“2009-10”:“不适用”,
“2010-11”:“不适用”}]
让结果=[]
for(让输入stateData[0]){
如果(+stateData[0][key]){
result.push(stateData[0][key])
}
}

console.log(result)
这是最短的,请尝试

let stateData=[{“1999-00”:“125236”,
"2000-01": "140119",
"2001-02": "151482",
"2002-03": "163385",
"2003-04": "184463",
"2004-05": "202575",
"2005-06": "239683",
"2006-07": "277286",
"2007-08": "326547",
"2008-09": "377346",
“2009-10”:“不适用”,
“2010-11”:“不适用”}]
让结果=[]
for(让输入stateData[0]){
如果(+stateData[0][key]){
result.push(stateData[0][key])
}
}

console.log(result)
一般来说,我处理此类问题的方式是:

  • 我首先将对象转换为相关数据的数组。在本例中,
    Object.entries
    将很好地满足我们的目的,它为我们提供了一个“元组”数组(元组只是一个数组),其中每个元组由2个值、一个键及其对应的值组成
  • 然后我们可以过滤元组数组,这就是我们发现给定值是否是有效数字的地方。