Javascript 更改字符串中的双字母
我正在做一个函数,它可以返回一个包含单词字符的数组。它需要将一些双字母保存为数组中的一个。我有一个包含双字母的数组。我有一张很大的单词表。现在的问题是,它将第一个字母保存了2次,并从名为字母的数组中的单词中保存了双字符。函数本身在一个循环中运行,该循环从json对象获取单词。这个函数是按照我所能想到的方式制作的,但是如果有更好的方法,请告诉我如何制作 职能:Javascript 更改字符串中的双字母,javascript,Javascript,我正在做一个函数,它可以返回一个包含单词字符的数组。它需要将一些双字母保存为数组中的一个。我有一个包含双字母的数组。我有一张很大的单词表。现在的问题是,它将第一个字母保存了2次,并从名为字母的数组中的单词中保存了双字符。函数本身在一个循环中运行,该循环从json对象获取单词。这个函数是按照我所能想到的方式制作的,但是如果有更好的方法,请告诉我如何制作 职能: var word = 'voorheen'; var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', '
var word = 'voorheen';
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'];
var letters = getLetters(word, doubles);
console.log(letters);
function getLetters(word, doubles) {
var letters = [];
var specials = [];
var indexes = [];
for(var s=0;s<doubles.length;s++) {
if(word.indexOf(doubles[s]) != -1) {
specials.push(doubles[s]);
indexes.push(word.indexOf(doubles[s]));
console.log('specials: ' + specials);
console.log('indexes: ' + indexes);
}
}
for(var i=0;i<word.length;i++) {
if(specials.length>0) {
for(var j=0;j<specials.length;j++) {
if(i<indexes[j]) {
letters.push(word[i]);
console.log('i: ' + i);
console.log('j: ' + j);
console.log('letter: ' + word[i]);
}
if(i==indexes[j]) {
letters.push(specials[j]);
console.log('i: ' + i);
console.log('j: ' + j);
console.log('letter: ' + word[i]);
}
if(i>indexes[j] + specials[j].length) {
letters.push(word[i]);
console.log('i: ' + i);
console.log('j: ' + j);
console.log('letter: ' + word[i]);
}
}
}
else {
letters.push(word[i]);
}
}
return letters;
}
虽然我想:
["v", "oo", "r", "h", "ee", "n"]
正则表达式尽可能多地捕获,除非特别声明为ungreedy,因此两个字母的组合优先于。匹配任何单个字符的
奖励积分,因为这可以扩展到包括任何长度的组合:p
正则表达式尽可能多地捕获,除非特别声明为ungreedy,因此两个字母的组合优先于。匹配任何单个字符的
奖励点,因为它可以扩展到包括任何长度的组合:p这里有一个解决方案,它应该在没有正则表达式和POJS的情况下工作 Javascript
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
result = [],
chars,
pair;
while (string) {
pair = string.slice(0, 2);
if (doubles.indexOf(pair) !== -1) {
result.push(pair);
string = string.slice(2);
} else {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
length = doubles.length,
result = [],
chars,
pair,
i;
while (string) {
pair = string.slice(0, 2);
i = 0;
while (i < length) {
if (pair === doubles[i]) {
result.push(pair);
string = string.slice(2);
break;
}
i += 1;
}
if (i === length) {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
输出
["v", "oo", "r", "h", "ee", "n"]
在
注:可以通过MDN上提供的垫片或通过。当然,您也可以手动循环数组并执行===
更新:不带Array.prototype.indexOf
Javascript
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
result = [],
chars,
pair;
while (string) {
pair = string.slice(0, 2);
if (doubles.indexOf(pair) !== -1) {
result.push(pair);
string = string.slice(2);
} else {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
length = doubles.length,
result = [],
chars,
pair,
i;
while (string) {
pair = string.slice(0, 2);
i = 0;
while (i < length) {
if (pair === doubles[i]) {
result.push(pair);
string = string.slice(2);
break;
}
i += 1;
}
if (i === length) {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
在
更新:出于纯粹的兴趣,我创建了一个测试正则表达式版本与上面针对特定字符串vorheen的测试 Javascript
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
result = [],
chars,
pair;
while (string) {
pair = string.slice(0, 2);
if (doubles.indexOf(pair) !== -1) {
result.push(pair);
string = string.slice(2);
} else {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
length = doubles.length,
result = [],
chars,
pair,
i;
while (string) {
pair = string.slice(0, 2);
i = 0;
while (i < length) {
if (pair === doubles[i]) {
result.push(pair);
string = string.slice(2);
break;
}
i += 1;
}
if (i === length) {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
输出
["v", "oo", "r", "h", "ee", "n"]
在
注:可以通过MDN上提供的垫片或通过。当然,您也可以手动循环数组并执行===
更新:不带Array.prototype.indexOf
Javascript
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
result = [],
chars,
pair;
while (string) {
pair = string.slice(0, 2);
if (doubles.indexOf(pair) !== -1) {
result.push(pair);
string = string.slice(2);
} else {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
function stringToFormattedArray(string) {
var doubles = ['aa', 'oo', 'ee', 'ie', 'oe', 'eu', 'uu', 'au', 'ou', 'ui', 'ng', 'ch', 'ij'],
length = doubles.length,
result = [],
chars,
pair,
i;
while (string) {
pair = string.slice(0, 2);
i = 0;
while (i < length) {
if (pair === doubles[i]) {
result.push(pair);
string = string.slice(2);
break;
}
i += 1;
}
if (i === length) {
result.push(pair.split("")[0]);
string = string.slice(1);
}
}
return result;
}
console.log(stringToFormattedArray("voorheen"));
在
更新:出于纯粹的兴趣,我创建了一个测试正则表达式版本与上面针对特定字符串vorheen的测试。好吧,在你对特例的迭代中,如果它不在当前索引中,你每次都在推送字母[j]。因为你们的特价商品有两名会员,所以每封信都会加倍 为了解决这个问题,您需要一个标志,在循环过程中设置当前字母是否应该被按下。顺便说一句,你的指数方法是有缺陷的,因为它不能处理重复的双打,例如oohoo。更好:
嗯,在你对特价的迭代中,如果不是在当前的索引中,你每次都在推这些字母[j]。因为你们的特价商品有两名会员,所以每封信都会加倍 为了解决这个问题,您需要一个标志,在循环过程中设置当前字母是否应该被按下。顺便说一句,你的指数方法是有缺陷的,因为它不能处理重复的双打,例如oohoo。更好:
我想你也把事情弄得太复杂了 请尝试以下方法:
我想你也把事情弄得太复杂了 请尝试以下方法:
你想要什么是输入,什么是输出?因为如果jquery可以更容易地创建满足我需要的函数,那么使用jquery就没有问题。如果你的doubles数组中有一个“rh”呢?它会最终输出[v,oo,rh,ee,n]?@VJD输入是上述函数中的一个字,它是voorhee和一个带有双字母的数组。输出应该如上所述。@c.O.u1是的,这正是我想要得到的。输入是什么,你想要什么输出?因为如果jquery可以更容易地创建满足我需要的函数,那么我使用jquery没有问题。如果你的doubles数组中有一个“rh”呢?它会最终输出[v,oo,rh,ee,n]?@VJD输入是上述函数中的一个字,它是voorhee和一个带有双字母的数组。输出应如上所述。@c.O.u1是的,这正是我试图获得的。捕获组是不必要的,并且在匹配空单词后不要忘记尾随| |[]捕获组是不必要的,并且不要忘记尾随| |[]在对空单词进行匹配尝试后,这取决于浏览器是否知道Array.prototype.indexOf,这对于旧版本的IE是不正确的。在这种情况下,您可以使用jQuery.inarayaa、arr。当然,jQuery是所有问题的答案。特别是当有一个无限简单的解决方案依赖于浏览器了解Array.prototype.indexOf时,这对于IE的旧版本来说是不正确的。在这种情况下,您可以使用jQuery.inarayaa,arr。因为,当然,jQuery是所有问题的答案。特别是当有一个无限简单的解决方案