面对使我崩溃的字符串数组-笔试篇

102 阅读1分钟

笔试的时候经常会遇到字符串数组,但是我之前的处理手段很low,我采用正则去手动除去多余的[]",但是我昨天遇到一个这个的题,就是处理之后还是字符串数组,那我肯定毛了,我要好好搞明白这个。

题目是 :输出这个字符串数组中可以转成数据类型的新的字符串数组

image.png

这时候我终于想起来了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() 转换的话,数据类型比较直接报错