javascript - JS 查找丢失的字母(字母 - 数组)
问题描述
编写一个函数,将一个连续(递增)字母数组作为输入,并返回数组中缺失的字母。它总是会丢失一个字母。该数组将始终仅在一种情况下包含字母。例子:
["a","b","c","d","f"] -> "e" ["O","Q","R","S"] -> "P"
为什么我的功能不起作用?
function findMissingLetter(array)
{
let alphabetArr = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
let alphabetSlice = alphabetArr.slice(alphabetArr.indexOf(array[0]), alphabetArr.indexOf(array[array.length - 1]) + 1);
let missingLetter = alphabetSlice.forEach((e, i) => {
if (e !== array[i]) {
return e;
}
});
return missingLetter;
}
function findMissingLetter(array)
{
let alphabetArr = Array.from('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz');
let alphabetSlice = alphabetArr.slice(alphabetArr.indexOf(array[0]), alphabetArr.indexOf(array[array.length - 1]) + 1);
let missingLetter = alphabetSlice.map((e, i) => {
if (e !== array[i]) {
return e;
}
})[0];
return missingLetter;
}
解决方案
要在数组中搜索一个元素,请使用for
循环,如下所示:
for(let i = 0; i < array.length; i++) {
if(array[i] !== alphabetSlice[i])
return alphabetSlice[i];
}
在这种方法中,您将搜索两个数组之间的第一个差异。不同之处将是您丢失的字母:)
为什么地图在这个例子中不起作用?
map
函数获取数据并将其替换为“重新排列”的数据。这个:
alphabetSlice.map((e, i) => {
if (e !== array[i]) {
return e;
}
}); // for your example will create array
将创建[undefined, undefined, undefined, undefined, 'e', 'f']
,所以第一个元素是undefined
.
为什么结果数组有undefined
?
因为你return
在if
. 所以当表达式if
为假时,你不会返回任何值,所以值为undefined
.
有关地图的更多信息,您可以在mdn上阅读。
推荐阅读
- flutter - 每当我在终端工作时,我写的关于 dart 流的代码都会给我一个空值
- gdb - GNAT studio 2020 社区不再对 GDB Windows 10 做出反应
- xaml - 对象名称在 .XAML 中定义,但无法识别为 .fs
- kubernetes - 如何使用 apiVersion "certificates.k8s.io/v1" 为 webhook 创建 "CertificateSigningRequest"
- php - 消息:count():参数必须是数组或实现 Countable 的对象
- java - JaxB - 嵌套元素值为空
- swift - 从“错误”转换为不相关类型“AuthErrorCode”总是失败
- docker-compose - Pycharm 卡在启动骨架生成器过程中
- c# - Entity Framework Core v.5+ 多对多 fluent api
- ios - 如何减少 UICollection 视图中的垂直间距