gpt4 book ai didi

javascript - 查找字符串中第一个不重复的字符,这里有什么错误?

转载 作者:行者123 更新时间:2023-12-03 07:03:07 25 4
gpt4 key购买 nike

我正在做一些练习。问题是找到字符串中的第一个非重复字符。我的想法是:将字符串转为数组。将 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"))

关于javascript - 查找字符串中第一个不重复的字符,这里有什么错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64077317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com