Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要帮助理解为什么会这样吗_Javascript_Function_If Statement_Indexof - Fatal编程技术网

Javascript 需要帮助理解为什么会这样吗

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()

此函数检查单词是否为等值线,这意味着没有重复的字母(不区分大小写)。我理解为什么我必须将它改为小写并遍历字符串,但我对这一部分感到困惑:“if(splitt.indexOf(splitt[I])!==I”。为什么我要检查的索引?也许,我不明白这行代码想说什么。有人能解释一下这行代码吗。谢谢大家!

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中的对象)来实现这个问题的更有效的解决方案。

    在这里发布之前,您研究过什么吗?这辆车怎么样?