代码背后的逻辑确定两个 javascript 字符串是不是是字谜

Posted

技术标签:

【中文标题】代码背后的逻辑确定两个 javascript 字符串是不是是字谜【英文标题】:Logic behind code determining if two javascript strings are anagrams代码背后的逻辑确定两个 javascript 字符串是否是字谜 【发布时间】:2017-08-13 11:09:00 【问题描述】:

我的朋友把这段代码发给我,它可以工作,但我不明白。

function anagram(str1, str2)
  if(str1.length !== str2.length)
    return false;
  

  var string1 = str1.toLowerCase();
  var string2 = str2.toLowerCase();

  if(string1 === string2)
    return true;
  

  var matched = true;
  var count = 0;

  while(string1.length)
    if(string2.length > 1)
      break;
    if(string2.indexOf(string1[count]) > -1)
      string2 = string2.replace(string1[count], '');
    else
      return false;

    count++;
  
  return matched;

我了解前两个if 语句和.toLowerCase() 分配,但我不明白var matched = true; 的目的,然后我知道为什么以break 结尾的if 语句存在但我不太明白最后的if/else 声明。

【问题讨论】:

或许你应该问问你的朋友? 【参考方案1】:

var matching = true - 这什么都不做,因为这个变量的值在整个代码中都没有改变。

“indexOf() 方法返回指定值在字符串中第一次出现的位置” 你的朋友正在使用 indexOf() 遍历 string1 中的每个字符以查找 string2 中的现有字符。在任何时候找不到字符时,它都会返回 false 并跳出 while 循环。

【讨论】:

非常感谢! 哦,好的;抱歉,我还是新手。 谢谢你。太好了,它对你有用

以上是关于代码背后的逻辑确定两个 javascript 字符串是不是是字谜的主要内容,如果未能解决你的问题,请参考以下文章

javascript 西班牙语图形重音背后的逻辑

如何避免两个并发的 API 请求破坏文档验证背后的逻辑?

确定两个字符串在Javascript中是不是相似?

JavaScript中使用“严格”做什么,背后的原因是什么?

Javascript:确定未知数组长度并动态映射

“use strict”在 JavaScript 中做了啥,背后的原因是啥?