Bla*_*tea 3 javascript arrays string filter
我正在做一些练习。问题是在字符串中找到第一个不重复的字符。我的想法是:将字符串转换为数组。将 array[0] 分配给一个新变量,并从 array 中删除这个 array[0]。检查这个新数组是否包含这个变量,如果没有,返回这个变量。否则,使用过滤器删除相同的值元素并获得一个新数组。重复这个过程。代码如下。
const NoneReChar = (str) => {
let tempArr = str.split('');
let start = tempArr[0];
while (true) {
tempArr.shift();
if (!tempArr.includes(start)) {
return start;
} else {
tempArr.filter(char => char !== start);
start = tempArr[0];
}
}
}
console.log(NoneReChar("aaaabbbeccc"))Run Code Online (Sandbox Code Playgroud)
我期望输出'e',但我一直得到'a'......我在这里犯的错误在哪里?
该Array.filter()方法不会改变原始数组。您需要将过滤器的结果分配给tempArr:
tempArr = tempArr.filter(char => char !== start);
Run Code Online (Sandbox Code Playgroud)
例子:
tempArr = tempArr.filter(char => char !== start);
Run Code Online (Sandbox Code Playgroud)
但是,您不处理未找到的情况。要处理它而不是true,while 子句应该在数组为空时停止:
const NoneReChar = (str) => {
let tempArr = str.split('');
let start = tempArr[0];
while (true) {
tempArr.shift();
if (!tempArr.includes(start)) {
return start;
} else {
tempArr = tempArr.filter(char => char !== start);
start = tempArr[0];
}
}
}
console.log(NoneReChar("aaaabbbeccc"))Run Code Online (Sandbox Code Playgroud)
另一种选择是比较过滤前后数组的长度。如果长度相同,则项目不重复:
const NoneReChar = (str) => {
let tempArr = str.split('');
let start = tempArr[0];
while (tempArr.length) {
tempArr.shift();
if (!tempArr.includes(start)) {
return start;
} else {
tempArr = tempArr.filter(char => char !== start);
start = tempArr[0];
}
}
return null;
}
console.log(NoneReChar("aabbcc"))Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |