0

我正在尝试从数组中删除特定字符。我正在传递一个句子,应该使用 map() 和 filters() 从 alpha 数组中删除该句子中的字符,

var alpha =['b','c','d','e','f','g','h','a']
            function removeAlpha(sentence){
                return alpha.map(function(melem,mpos,marr){
                    return sentence.toLowerCase().split("").filter(function(elem,pos,arr){
                        melem!=elem
                    });
                }); 
            }

            console.log(removeAlpha('bdog'));

请让我知道,我做错了什么

4

2 回答 2

0

您还可以通过将数组转换为字符串并将句子用作 RegExp字符集来使用String#replace

var alpha =['b','c','d','e','f','g','h','a'];

function removeAlpha(sentence){
  return alpha
    .join('')
    .replace(new RegExp('[' + sentence + ']', 'g'), '')
    .split(''); // replace all characters with an empty string
}

console.log(removeAlpha("bdog"));

于 2017-08-15T15:15:49.807 回答
0

内部回调函数不返回值。melem!=elem应该是return melem!=elem

更正之后,内部filter返回一个数组,其中删除了一个字母,但只有那个字母。在 outer 的下一次迭代中map,您从头开始并返回一个仅删除第二个字母的数组,依此类推...这为您提供了一个数组数组,其中在每个数组中删除了一个字母字符。

然而,您需要一些非常不同的东西:您需要 alpha 数组中不在句子中的字符(而不是句子中不在 alpha 数组中的字符)。

为此,您应该应用filteron alpha

var alpha =['b','c','d','e','f','g','h','a']
function removeAlpha(sentence){
    return alpha.filter(function(melem){
        return !this.includes(melem);
    }, sentence.toLowerCase());
}

console.log(removeAlpha('bdog'));

于 2017-08-15T15:16:00.827 回答