如何使用过滤器和映射从数组中删除字符?

how to remove character from array using filters and map?

我正在尝试从数组中删除特定字符。 我正在传递一个句子,应该使用 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'));

请让我知道我做错了什么

你也可以使用String#replace by converting the array to a string and use the sentence as a RegExp character set:

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"));

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

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

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

为此你应该在 alpha 上应用 filter:

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'));