Javascript 需要帮助理解为什么会这样吗
此函数检查单词是否为等值线,这意味着没有重复的字母(不区分大小写)。我理解为什么我必须将它改为小写并遍历字符串,但我对这一部分感到困惑:“if(splitt.indexOf(splitt[I])!==I”。为什么我要检查的索引?也许,我不明白这行代码想说什么。有人能解释一下这行代码吗。谢谢大家!Javascript 需要帮助理解为什么会这样吗,javascript,function,if-statement,indexof,Javascript,Function,If Statement,Indexof,此函数检查单词是否为等值线,这意味着没有重复的字母(不区分大小写)。我理解为什么我必须将它改为小写并遍历字符串,但我对这一部分感到困惑:“if(splitt.indexOf(splitt[I])!==I”。为什么我要检查的索引?也许,我不明白这行代码想说什么。有人能解释一下这行代码吗。谢谢大家! function isIsogram(str) { //turn input string into all lowercase //console.log(str.toLowerCase()
function isIsogram(str) {
//turn input string into all lowercase
//console.log(str.toLowerCase());
var lower = str.toLowerCase();
// split lowercase string
//console.log(lower.split(''));
var splitt = lower.split('');
//iterate through split string [A, l, g, o, r, i, s, m]
for(var i = 0; i < splitt.length; i++){
// console.log(splitt.indexOf(splitt[i]) !== i);
if(splitt.indexOf(splitt[i]) !== i){
return false;
}
}
return true;
// if we have encountered current element within srting again
//return false
//otherwise
//return true
}
var output = isIsogram("AlgoriSsm");
console.log('should be false:', output);
函数isIsogram(str){
//将输入字符串全部转换为小写
//log(str.toLowerCase());
var lower=str.toLowerCase();
//拆分小写字符串
//控制台日志(较低的分割(“”));
var splitt=较低的分割(“”);
//迭代拆分字符串[A,l,g,o,r,i,s,m]
对于(变量i=0;i
的行为方式非常特殊:
indexOf()
调用indexOf()
所处的循环逐个迭代字符串中的每个字符。这里的检查是为了确保当它遇到一个特定的字符时,相同的字符不会出现在另一个(较低的)索引中
例如,以字符串为例:杂耍
。您的循环将有效地执行以下步骤:
juggling
^ --> character at index 0 is 'j'
--> 'juggling'.indexOf('j') === 0 - no 'j's before this one
juggling
^ --> character at index 1 is 'u'
--> 'juggling'.indexOf('u') === 1 - no 'u's before this one
juggling
^ --> character at index 2 is 'g'
--> 'juggling'.indexOf('g') === 2 - no 'g's before this one
juggling
^
--> character at index 3 is 'g'
--> 'juggling'.indexOf('g') !== 3 - there's a 'g' before this one - not an isogram!
--> return false as a result
简而言之,您的逻辑基本上是在一个字符数组上迭代,对于每个字符(在数组中的特定索引处),它检查该字符的“第一次出现”是否与当前索引不同。如果第一次出现的不是当前索引,则字符必须出现在其他位置(在此索引之前)
整个逻辑是这样的:
将字符串转换为小写(使逻辑不区分大小写)
在字符数组中拆分字符串
对于每个索引i
在索引i
处获取字符c
(lower[i]
)
使用indexOf
函数获取数组中c
的第一个索引
如果c
的第一个索引不是i
,那么c
一定在某个点出现在i
之前。返回false
如果上述条件与任何索引不匹配,则返回true
顺便说一句,可以通过使用地图(或JS中的对象)来实现这个问题的更有效的解决方案。在这里发布之前,您研究过什么吗?这辆车怎么样?