我使用下面的代码尝试找到序列中的第一个重复字符。当我在浏览器中运行代码并在控制台中使用letterArray.forEach函数将其停止时,控制台日志错误表明我对forEach的输入未定义。但在我看来,对于每个应该只是一次从letterArray中获取一个输入,看看它们是否相等,并返回结果。有人知道为什么它说我的forEach循环不能读取来自我的letterArray的输入吗?
function firstNotRepeatingCharacter(string) {
var letterArray = [];
letterArray['a'] = 0;
letterArray['b'] = 0;
letterArray['c'] = 0;
letterArray['d'] = 0;
letterArray['e'] = 0;
letterArray['f'] = 0;
letterArray['g'] = 0;
letterArray['h'] = 0;
letterArray['i'] = 0;
letterArray['j'] = 0;
letterArray['k'] = 0;
letterArray['l'] = 0;
letterArray['m'] = 0;
letterArray['n'] = 0;
letterArray['o'] = 0;
letterArray['p'] = 0;
letterArray['q'] = 0;
letterArray['r'] = 0;
letterArray['s'] = 0;
letterArray['t'] = 0;
letterArray['u'] = 0;
letterArray['v'] = 0;
letterArray['w'] = 0;
letterArray['x'] = 0;
letterArray['y'] = 0;
letterArray['z'] = 0;
for(var letter of string) {
letterArray[letter] = letterArray[letter] + 1;
}
letterArray.forEach(function(value, index, thearay) {
if (value == 1) {
console.log(index);
}
});
}
var tester = "abacabad";
firstNotRepeatingCharacter(tester);
答案 0 :(得分:2)
您所需代码的最小更改如下(请参阅代码中的注释// ******
)
function firstNotRepeatingCharacter(string) {
// *********** change to Object
var letterArray = {};
letterArray['a'] = 0;
letterArray['b'] = 0;
letterArray['c'] = 0;
letterArray['d'] = 0;
letterArray['e'] = 0;
letterArray['f'] = 0;
letterArray['g'] = 0;
letterArray['h'] = 0;
letterArray['i'] = 0;
letterArray['j'] = 0;
letterArray['k'] = 0;
letterArray['l'] = 0;
letterArray['m'] = 0;
letterArray['n'] = 0;
letterArray['o'] = 0;
letterArray['p'] = 0;
letterArray['q'] = 0;
letterArray['r'] = 0;
letterArray['s'] = 0;
letterArray['t'] = 0;
letterArray['u'] = 0;
letterArray['v'] = 0;
letterArray['w'] = 0;
letterArray['x'] = 0;
letterArray['y'] = 0;
letterArray['z'] = 0;
for(var letter of string) {
letterArray[letter] = letterArray[letter] + 1;
}
// *********** an object has no forEach,
// so, we now need to iterate through the keys
// (a,b,c ...) of the object,
// that's where Object.keys helps
Object.keys(letterArray).forEach(function(key, index, thearay) {
var value = letterArray[key]; //the value is letterArray[key]
if (value == 1) {
console.log(key);
}
});
}
var tester = "abacabad";
firstNotRepeatingCharacter(tester);

然而,看看函数的名称,我希望
firstNotRepeatingCharacter("abacabad"); // c
firstNotRepeatingCharacter("abadacad"); // d
如果是这样,代码会更简单
function firstNotRepeatingCharacter(string) {
for (let i = 0; i < string.length; i++) {
if (string.split(string[i]).length == 2) {
return string[i];
}
}
return null;
}
console.log(firstNotRepeatingCharacter("abacadab"));
console.log(firstNotRepeatingCharacter("abadacab"));
&#13;