【发布时间】:2016-04-29 21:07:57
【问题描述】:
只是为了好玩,我写了一个快速脚本来接收一个逗号分隔字符的字符串,我使用逗号来表示一个不同的单词,然后我输出一个以单词为元素的数组。我的问题在于我的逻辑 - 这仅适用于原始字符串中的逗号。
发生的情况是该算法仅查看我在调用函数时提供的分隔符数组中的第一个元素(逗号)。我正在考虑在某处使用布尔值作为标志,但不确定这是否真的是最好的方法。有什么建议吗?
var stringToArray = function(delimiterArray, originalString) {
var arrayOutput = []
var tempWord = ""
for (var i = 0; i < originalString.length; i++) {
for (var j = 0; j < delimiterArray.length; j++) {
var currentCharacter = originalString.charAt(i)
var currentDelimiter = delimiterArray[j]
while (currentCharacter != currentDelimiter) {
tempWord += currentCharacter
//once we hit a delimiter, break so that we can move onto the next conditional statement.
break
}
if (currentCharacter === currentDelimiter) {
//push word onto the array to hold each string, and then break out so we can go back to the iteration of the nested loops
arrayOutput.push(tempWord)
tempWord = ""
break
}
//we break out of the second for loop ->
break
}
}
return arrayOutput
}
delims = [',', '.', ';', ' ']
originalString = "USA,Canada,Mexico,Bermuda,Grenada,Belize"
finalOutput = stringToArray(delims, originalString)
console.log(finalOutput)
如果我使用 '.'作为我用作参数的字符串中的分隔符,我的算法失败了。我在 C 中使用布尔标志(很久以前)实现了这个,我必须编写更多代码,因为我没有使用任何内置函数(必须找到所有内容的长度,以便我可以为数据结构分配足够的内存存储东西)。不过,不想重新访问那个旧代码。
【问题讨论】:
-
Javascript 已经有一个
split()函数来执行此操作。此外,如果您想在数组中搜索某些内容,可以使用indexOf()而不是编写自己的循环。 -
@Barmar 是的,完全清楚。如第一行所述,这只是为了好玩。我想自己实现。
-
您的
while()循环永远不会修改currentCharacter或currentDelimiter,因此它将永远循环。 -
但是由于它有一个
break来防止循环,所以它实际上只是一个if()语句。你为什么用while? -
为什么要把事情复杂化 -> jsfiddle.net/0hbmgbuy
标签: javascript string algorithm logic delimiter