[英]How to correctly use Array.map() for replacing string with alphabet position
其他SO'用字母位置替换字符串'的问题没有使用map,这就是我正在努力学习如何使用它来解决这个问题。
问题:给定一个字符串,将每个字母替换为字母表中的位置。 如果文本中的任何内容不是字母,请忽略它并且不返回它。 “a”= 1,“b”= 2等
我尝试过的是: - 在一个新的数组实例上进行循环并将索引值设置为String.fromCharCode()
- 将输入字符串设置为小写-splitting到array -return array.map()。join('')
function alphabetPosition(text) {
let alphabet = new Array(26);
for (let i = 0; i<26; ++i) {
let char = String.fromCharCode(97 + i);
alphabet[i] = char;
}
text = text.toLowerCase();
let arr = text.split('');
return arr.map(element => { return element = alphabet.indexOf(element+1) }).join(' ');
}
期望它返回一串字母位置,但什么都没有。 我的Array.map()实现有什么问题?
在你的地图element
中将是一个字母,例如"a"
。 然后你添加(concat)1,这导致"a1"
不在你的字母表中。 element =
也是不必要的, return
位置就足够了。
你复杂的解决方案,最简单的方法是找到charcode并返回它。
function alphabetPosition(text) {
let str = '';
for (var i = 0; i < text.length; i++) {
str += (text[i] + (text.charCodeAt(i) - 96));
}
return str;
}
我完全理解这是一个编码挑战,面试问题或同样如此,如果你真的需要使用map(),你应该只返回传递给map的回调结果,如下所示:
return arr.map(x => alphabet.indexOf(x) + 1).join(' ')
但是,在你的情况下,reduce()似乎更合适:
return arr.reduce((ac, cv) => ac + (alphabet.indexOf(cv) + 1) + ' ', '')
你的map()
函数的最后一行是返回赋值的值。
return arr.map(element => { return element = alphabet.indexOf(element+1) }).join(' ');
只需要alphabet.indexOf(element)
就足够了。
这将为您提供所需的结果:
alphabetPosition = text => { let alphabet = new Array(26); for (let i = 0; i < 26; ++i) { let char = String.fromCharCode(97 + i); alphabet[i] = char; } return text.toLowerCase().split('').map(element => alphabet.indexOf(element) ).join(' '); } console.log(alphabetPosition("This is a string"));
希望这可以帮助,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.