如何将一串句子分成两半,分成两个字符串的数组,每个字符串的长度尽可能相似?

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,我就会得到两个字符串的理想目标长度...我只是很难splitjoin正确的顺序来解析它们。

Tim*_*Lee 2

一个快速的解决方案:)

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)