如何选择数值元素以及如何忽略字母元素(在本例中,"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": "NA",
"2010-11": "NA" }]
发布于 2020-06-13 12:24:41
我处理这类问题的一般方法是:
Object.entries将很好地满足我们的需要,它给出了一个“元组”数组(元组只是一个数组),其中每个元组由2个值、一个键及其相应的值组成。0).NaN (不是数字),而Boolean(NaN)是false (值得注意,Boolean(0)也是假的),所以只有当您知道数字永远不等于NaN时,这个方法才能工作--我们可以使用Object.fromEntries.将这个经过过滤的元组列表转换回一个对象。
const input = {
"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"
};
const output = Object.fromEntries(
Object.entries(input)
.filter(([k, v]) =>
Boolean(Number(v))
)
);
console.log(output);
发布于 2020-06-13 12:15:18
尝试map并在其中获取对象的条目,然后过滤与数字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+/))));
console.log(result);
发布于 2020-06-13 12:17:27
您可以使用一个简单的正则表达式/^\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);https://stackoverflow.com/questions/62359547
复制相似问题