首页 > 解决方案 > 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;
}

标签: javascriptarraysalphabetical

解决方案


要在数组中搜索一个元素,请使用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

因为你returnif. 所以当表达式if为假时,你不会返回任何值,所以值为undefined.

有关地图的更多信息,您可以在mdn上阅读。


推荐阅读