繁体   English   中英

如何正确使用Array.map()替换字符串位置的字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM