首页 > 解决方案 > Javascript内部数组长度中的双重for循环

问题描述

我正在尝试创建一个函数,该函数接受一个字符串并将每个字母的值更改为“(”,如果该字符在字符串中不重复,如果该字符在字符串中确实存在重复,则为“)”。我决定采用非常规的方法来解决这个问题,但我遇到了一个双 for 循环的问题。据我了解,javascript中的内部for循环无法访问循环外的变量。我想循环遍历数组中的每个项目两次,但我不确定将内部循环长度设置为什么。

这是我的代码:

function sortAndChange(word) {
const splitter = word.toLowerCase().split("");
//let jSplitter = word.toLowerCase().split("").length;
let endResult = "";
let truthArray = [];

for(i = 0; i < splitter.length; i++){
    for(j = 0; j < splitter.length; j++){
        console.log(j);
        if(splitter[i] == splitter[j]){
            truthArray.push(true);
        } else {
            truthArray.push(false);
        }
    }
    console.log(truthArray);
    truthArray.every(item => item === false) ? endResult += "(" : endResult += ")";
    truthArray = [];
}
console.log(endResult);
}

预期结果:

sortAndChange("Success") //expected output: ")())())"
sortAndChange("easy") //expected output: "(((("

标签: javascript

解决方案


您可以通过以下步骤执行此操作:

  • split使用并在其上使用将字符串转换为数组map()
  • 比较indexOf()andlastIndexOf()以检查其是否重复。
  • 根据您的条件返回)or 。(最后join是数组

function sortAndChange(str){
  let arr = str.toLowerCase().split('')
  return arr.map(x => {
    //if its not duplicated
    if(arr.indexOf(x) === arr.lastIndexOf(x)){
      return '('
    }
    //If its duplicated
    else{
      return ')'
    }
  }).join('');
}

console.log(sortAndChange("Success")) //expected output: ")())())"
console.log(sortAndChange("easy")) //expected output: "(((("


推荐阅读