xd1*_*936 5 javascript arrays string prototype
我这里有一个有趣的问题。我有几个 Javascript 字符串,如下所示:
var a = "A few sentences. For tests. The point of these sentences is to be used as examples.";
var b = "A couple more sentences. These ones are shorter.";
var c = "Blah. Foo. Bar. Baz. Test. Test 2. Test C.";
var d = "Test sentence.";
Run Code Online (Sandbox Code Playgroud)
我想扩展string原型以提供一种方法,将每个字符串拆分为两个字符串的数组,每个字符串具有数学上尽可能相似的字符数,同时还保留整个句子。
我正在寻找的结果:
a.halve() // ["A few sentences. For tests.", "The point of these sentences is to be used as examples."]
b.halve() // ["A couple more sentences.", "These ones are shorter."]
c.halve() // ["Blah. Foo. Bar. Baz.", "Test. Test 2. Test C."]
d.halve() // ["Test sentence.", ""]
Run Code Online (Sandbox Code Playgroud)
如果我这样做a.length / 2,我就会得到两个字符串的理想目标长度...我只是很难split以join正确的顺序来解析它们。
一个快速的解决方案:)
Reflect.set(String.prototype, 'halve', function(){
let mid = Math.floor(this.length/2)
let i = mid - 1, j = mid, sep = mid
while(j<this.length) {
if(this[i]==='.') { sep = i + 1; break }
if(this[j]==='.') { sep = j + 1; break }
i--
j++
}
return [this.slice(0,sep), this.slice(sep)]
})
var a = "A few sentences. For tests. The point of these sentences is to be used as examples.";
var b = "A couple more sentences. These ones are shorter.";
var c = "Blah. Foo. Bar. Baz. Test. Test 2. Test C.";
var d = "Test sentence.";
console.log(a.halve()) // ["A few sentences. For tests.", "The point of these sentences is to be used as examples."]
console.log(b.halve()) // ["A couple more sentences.", "These ones are shorter."]
console.log(c.halve()) // ["Blah. Foo. Bar. Baz.", "Test. Test 2. Test C."]
console.log(d.halve()) // ["Test sentence.", ""]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |