javascript - 查找字符串中第一个不重复的字符,这里的错误是什么?
问题描述
我正在做一些练习。问题是在字符串中找到第一个不重复的字符。我的想法是:将字符串转换为数组。将 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"))
我期待输出'e',但我一直得到'a'......我在这里犯的错误在哪里?
解决方案
该Array.filter()
方法不会改变原始数组。您需要将过滤器的结果分配给tempArr
:
tempArr = tempArr.filter(char => char !== start);
例子:
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"))
但是,您不处理未找到的情况。要处理它而不是true
,while 子句应该在数组为空时停止:
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"))
另一种选择是比较过滤前后数组的长度。如果长度相同,则该项不重复:
const NoneReChar = (str) => {
let tempArr = str.split('');
while (tempArr.length) {
const [start, ...rest] = tempArr; // take the 1st item and the rest
tempArr = rest.filter(char => char !== start); // filter out start
if(tempArr.length === rest.length) { // check current and previous arrays, and if the length still matches, start didn't appear again
return start;
}
}
return null;
}
console.log(NoneReChar("aabzbcc"))
推荐阅读
- python - 模块“tkinter”没有属性“tkinter”?
- ios - 在 UserDefaults 中保存嵌套字典并管理重复检查 [Swift 4.2]
- css - Flexbox (Bootstrap 4.2) 堆叠网格布局(如浮动:左)
- react-native - 当我使用 expo 视频播放器将另一个视频推送到堆栈时,如何暂停或停止视频?
- android - Firebase AdMob 警告:“广告请求成功,但由于广告资源不足,未返回任何广告”
- swift - Swift 集合视图选择
- ruby-on-rails - 每当我们从控制器运行列表/查找查询时,如何调用 Gem 的自定义函数(通过在模型中添加任何 attr_accessor/Method/Callbacks)?
- java - 字符串不会转换为 int
- android - 如何动态获取和比较android中两张图片的图片资源?
- javascript - JSON 输出未显示在控制台日志中