缺少字母 freecodecamp
Missing letters freecodecamp
其实我几分钟前就找到了答案。
但是我发现了一些奇怪的事情。
这是我在 freeCodeCamp 挑战中 'Missing letters' 的回答。
function fearNotLetter(str) {
var string;
for (i=0;i<str.length;i++) {
if(str.charCodeAt(i)+1 < str.charCodeAt(i+1)){
string = String.fromCharCode(str.charCodeAt(i)+1);
}
}
return string;
}
当我将 if 语句中的 < 运算符更改为 !=(不相同)时,它不起作用!
对我来说,似乎 != 的工作原理与 < 运算符完全相同。
(因为 'not same' 可能意味着某物比另一个大。)
上面代码中的 < 和 != 有什么区别?
您的代码有一个小缺陷,当您使用 < 但不使用 != 时会起作用。
如果你看到 str.charCodeAt(i+1);此代码在最后一次迭代中检查字符串末尾之后的一个点,并将 return 一个 NaN 结果。
如果我提供字符串 "abce",它将检查 f 是否 < NaN。我相信 NaN 不能与 f 的值进行比较,因此它不会进入 if 语句。因此它将保留在先前迭代中找到的缺失字母 d,该字母存储在您的字符串变量中。
但是,如果您提供 !=,那么在相同的情况下它会知道 f != NaN 并进入 if 语句。然后这将覆盖实际丢失的字母并使您的 FCC 测试用例失败,因为它正在用字符串变量中的 f 替换丢失的 d。
要修复您的代码,只需将 for 循环更改为在字符串长度之前结束一次迭代即可。
for (i = 0; i != str.length-1; i++) {
}
这是我没有使用 .charCodeAt() 函数的方法:)
function fearNotLetter(str) {
var ind;
var final = [];
var alf =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
str = str.split('');
ind = alf.splice(alf.indexOf(str[0]),alf.indexOf(str[str.length-1]));
for(var i=0;i<ind.length;i++){
if(str.indexOf(ind[i]) == -1){
final.push(ind[i]);
}
}
if(final.length != 0){
return final.join('');
}
return;
}
fearNotLetter("bcef");
我的解决方案:
function fearNoLetter(str){
var j= str.charCodeAt(0);
for(var i=str.charCodeAt(0); i<str.charCodeAt(str.length-1); i++){
j = str.charCodeAt(i - str.charCodeAt(0));
if (i != j){
return String.fromCharCode(i);
}
}
}
我的解决方案:
function fearNotLetter(str) {
let y = 0;
for (let i = str.charCodeAt(0); i < str.charCodeAt(str.length - 1); i++) {
if (str.charCodeAt(y) != i) {
return String.fromCharCode(i);
}
y++;
}
return;
}
console.log(fearNotLetter("ace"));
function fearNotLetter(str) {
let alpha = "abcdefghijklmnopqrstuvwxyz";
let alphabet = []
for(let j = 0; j< alpha.length; j++){
alphabet.push(alpha[j])
}
if (alphabet.length == str.length){
let result = undefined;
return result
}else{
const start =alphabet.indexOf(str[0])
let end = (str.length)-1
const stop = alphabet.indexOf(str[end])
const finish = alphabet.slice(start,stop)
let result = finish.filter(item => !finish.includes(item) || !str.includes(item))
result = String(result)
return result
}
return result
}
console.log(fearNotLetter("abcdefghijklmnopqrstuvwxyz"));
其实我几分钟前就找到了答案。 但是我发现了一些奇怪的事情。
这是我在 freeCodeCamp 挑战中 'Missing letters' 的回答。
function fearNotLetter(str) {
var string;
for (i=0;i<str.length;i++) {
if(str.charCodeAt(i)+1 < str.charCodeAt(i+1)){
string = String.fromCharCode(str.charCodeAt(i)+1);
}
}
return string;
}
当我将 if 语句中的 < 运算符更改为 !=(不相同)时,它不起作用! 对我来说,似乎 != 的工作原理与 < 运算符完全相同。 (因为 'not same' 可能意味着某物比另一个大。)
上面代码中的 < 和 != 有什么区别?
您的代码有一个小缺陷,当您使用 < 但不使用 != 时会起作用。
如果你看到 str.charCodeAt(i+1);此代码在最后一次迭代中检查字符串末尾之后的一个点,并将 return 一个 NaN 结果。
如果我提供字符串 "abce",它将检查 f 是否 < NaN。我相信 NaN 不能与 f 的值进行比较,因此它不会进入 if 语句。因此它将保留在先前迭代中找到的缺失字母 d,该字母存储在您的字符串变量中。
但是,如果您提供 !=,那么在相同的情况下它会知道 f != NaN 并进入 if 语句。然后这将覆盖实际丢失的字母并使您的 FCC 测试用例失败,因为它正在用字符串变量中的 f 替换丢失的 d。
要修复您的代码,只需将 for 循环更改为在字符串长度之前结束一次迭代即可。
for (i = 0; i != str.length-1; i++) {
}
这是我没有使用 .charCodeAt() 函数的方法:)
function fearNotLetter(str) {
var ind;
var final = [];
var alf =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'];
str = str.split('');
ind = alf.splice(alf.indexOf(str[0]),alf.indexOf(str[str.length-1]));
for(var i=0;i<ind.length;i++){
if(str.indexOf(ind[i]) == -1){
final.push(ind[i]);
}
}
if(final.length != 0){
return final.join('');
}
return;
}
fearNotLetter("bcef");
我的解决方案:
function fearNoLetter(str){
var j= str.charCodeAt(0);
for(var i=str.charCodeAt(0); i<str.charCodeAt(str.length-1); i++){
j = str.charCodeAt(i - str.charCodeAt(0));
if (i != j){
return String.fromCharCode(i);
}
}
}
我的解决方案:
function fearNotLetter(str) {
let y = 0;
for (let i = str.charCodeAt(0); i < str.charCodeAt(str.length - 1); i++) {
if (str.charCodeAt(y) != i) {
return String.fromCharCode(i);
}
y++;
}
return;
}
console.log(fearNotLetter("ace"));
function fearNotLetter(str) {
let alpha = "abcdefghijklmnopqrstuvwxyz";
let alphabet = []
for(let j = 0; j< alpha.length; j++){
alphabet.push(alpha[j])
}
if (alphabet.length == str.length){
let result = undefined;
return result
}else{
const start =alphabet.indexOf(str[0])
let end = (str.length)-1
const stop = alphabet.indexOf(str[end])
const finish = alphabet.slice(start,stop)
let result = finish.filter(item => !finish.includes(item) || !str.includes(item))
result = String(result)
return result
}
return result
}
console.log(fearNotLetter("abcdefghijklmnopqrstuvwxyz"));