2017-06-21 72 views
0

我想在数组上的特定索引上使用str.charCodeAt()。 这是不工作的代码:str.charCodeAt()不能在数组上工作

function rot13(str) { 

    str = str.split(""); 

    for (i = 0; i < str.length; i++) { 

    str[i] = str.charCodeAt(i); 


    } 


    return var1; 
} 

rot13("SERR"); 

的错误是:“类型错误:str.charCodeAt()不是一个函数”。

如果我将数组索引分配给一个变量,然后对变量进行操作,我必须这样做还是有办法在数组上执行此操作?

有了它的变量:

var1 = str[i]; 
var1 = var1.charCodeAt(); 
str[i] = var1; 
+0

你写的'str.charCodeAt',不'STR [1] .charCodeAt'。避免混淆名称通常是一个好主意,比如名为'str'的​​变量,有时包含一个字符串并且有时包含一个数组。 – Ryan

+0

你为什么要返回'var1'它不存在于你的函数中 – synthet1c

+0

你返回'var1',但从来没有定义它? – BenM

回答

2

charCodeAt()只适用于字符串,而不是数组。你需要访问数组元素。每个数组元素包含一个包含一个元素的字符串,您可以在该字符串上使用charCodeAt()

str[i] = str[i].charCodeAt(0); 

但是,并不需要首先将字符串拆分为数组。您可以为结果数组使用不同的变量。

function rot13(str) { 
 
    var result = []; 
 
    for (var i = 0; i < str.length; i++) { 
 
    result[i] = str.charCodeAt(i); 
 
    } 
 
    return result; 
 
} 
 

 
console.log(rot13("SERR"));

0

你可以使用通过映射功能更强大的方法相比,它返回​​中charCode的字符数组。

const rot13 = (str) => str.split("").map(x => x.charCodeAt(0)) 
 

 
console.log(
 
    rot13("SERR") 
 
)

0

看起来你在这里有多个问题,

str = str.split(""); 

当你这样做str成为一个数组,它不再是一个String。这是你得到错误的原因。

所有您需要做的仅仅是取消拆分相关的代码和次要修复后,它应该正常工作

function rot13(str) { 
    var var1=[]; 
    for (i = 0; i < str.length; i++) { 
    var1[i] = str.charCodeAt(i); 
    } 
    return var1; 
} 
0

只是Array.prototype.from,但是记住,你可能并不需要将字符串分割成因为String是一个可迭代的对象。

function rot13(str) { 
 

 
    return Array.from(str, (char, i) => str.charCodeAt(i)) 
 
} 
 

 
console.log(rot13("SERR"));

相关问题