javascript - 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: "(((("
解决方案
您可以通过以下步骤执行此操作:
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: "(((("
推荐阅读
- c# - 从 oracle forms 6i 调用 C# DLL
- javascript - 如何从侧边栏显示单击的项目到第一个位置,剩余的列表被隐藏并悬停显示列表
- python - 使用“时间”获取上午或下午
- wordpress - 如何在 WordPress 的作者长传中添加“阅读更多”
- filter - ublock, adblock: block elements with dynamical id
- r - R not recognizing my alternative GCC compiler after config updates?
- javascript - I want to get latitude longitude height of my mouse at the bottom of the cesium screen
- python - python Serialport写入十进制
- ruby - 与 ruby net/ssh gem 建立连接后如何进行 SSH
- apache-camel - 如何将肥皂剧保存到 apache camel 中的文件?