我有一些输入如下:
2
2 2
2
2 0
0 5
3 3
3 5
1 1 1
3 0 0
1 10 0
(有时)在末尾加上一个额外的换行符。我已经使用var b = this.data.replace(/\n/g, " ").split(/[\s,]+/).map(Number);
将此数据拆分为数字数组,其中上述输入存储在this.data
中。 b
是新数组。如果末尾没有换行符,则可以正常工作。但是,如果结尾处有换行符,那么结尾处将额外加0。似乎正在发生以下情况:
\n
字符被空格代替\n
时,此列表末尾有一个(空白)元素map(Number)
将最后一个(空)元素解释为0
。 如何防止这种情况发生?
答案 0 :(得分:2)
匹配数字序列,并将其映射为数字:
const str = `
2
2 2
2
2 0
0 5
3 3
3 5
1 1 1
3 0 0
1 10 0
`
const result = str.match(/\d+/g).map(Number)
console.log(result)
答案 1 :(得分:1)
trim()字符串,然后再使用它
trim()方法从字符串的两端删除空格。在这种情况下,空白是所有空白字符(空格,制表符,不间断空格等)和所有行终止符(LF,CR等)。
const str = `
2
2 2
2
2 0
0 5
3 3
3 5
1 1 1
3 0 0
1 10 0
`
const result = str.trim().split(/\s|\n/).map(Number)
console.log(result)
答案 2 :(得分:0)
一种可能的解决方案是在.map()
之前使用Array.filter()
const str = `
2
2 2
2
2 0
0 5
3 3
3 5
1 1 1
3 0 0
1 10 0
`
const result = str.split(/\n|\s/).filter(Boolean).map(Number);
console.log(result);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
但是,也可以使用String.match()
完成此任务
const str = `
2
2 2
2
2 0
0 5
3 3
3 5
1 1 1
3 0 0
1 10 0
`
const result = str.match(/\d+/g).map(Number);
console.log(result);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
或者,以一种棘手的方式使用replacement function中的String.replace()。
const str = `
2
2 2
2
2 0
0 5
3 3
3 5
1 1 1
3 0 0
1 10 0
`
let result = [];
str.replace(/\d+/g, m => (result.push(+m), m));
console.log(result);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}