笔试的时候经常会遇到字符串数组,但是我之前的处理手段很low,我采用正则去手动除去多余的[]",但是我昨天遇到一个这个的题,就是处理之后还是字符串数组,那我肯定毛了,我要好好搞明白这个。
题目是 :输出这个字符串数组中可以转成数据类型的新的字符串数组
这时候我终于想起来了JSON.parse JSON.stringtify
let str = '["567",null,"u44","0",1,"eleven","ten","99"]';
console.log(typeof str); // string
JSON.parse
将字符串转成js对象,以前我太肤浅了,以为这个方法只是针对json字符串的,现在我理解它可以把字符串数组转成数组对象
let str = '["567",null,"u44","0",1,"eleven","ten","99"]';
let s = JSON.parse(str)
console.log(Object.prototype.toString.call(s)); // [object Array]
所以综上,上面那个算法题的解答就是
let str = '["567",null,"u44","0",1,"eleven","ten","99"]';
let res = []
ten(str)
function ten(str) {
let s = JSON.parse(str)
s.forEach((ele, i) => {
if (parseInt(ele).toString() !== 'NaN') {
res.push(ele)
}
})
}
console.log(JSON.stringify(res)); // ["567","0",1,"99"]
在说说核心的判断语句parseInt(ele).toString() !== 'NaN'
parseInt
解析一个字符串,并返回一个整数,
只有字符串中的第一个数字会被返回。
console.log(parseInt("123 456")); // 123
如果字符串的第一个字符解析不出来,就会返回NaN
toString()
let a = parseInt(null)
console.log(typeof a); // number
let b = parseInt(null).toString()
console.log(typeof b); // string
很明显,如果不使用toString() 转换的话,数据类型比较直接报错