Javascript 按字母过滤数组

Javascript 按字母过滤数组,javascript,arrays,filtering,Javascript,Arrays,Filtering,请原谅,如果有人问我这个问题,但我搜索了,没有找到我的问题的具体实现 无论如何,我目前正在学习JavaScript中的高阶函数,我正在学习array.prototype.filter函数。我理解它的目的(正如它的名字所暗示的那样),但我在实现这一点上遇到了困难: 假设我有一个名称数组,如下所示: var names = ["Anna", "Bob", "Charles", "Daniel", "Allison", "Beatrice", "Cindy", "Fiona"];

请原谅,如果有人问我这个问题,但我搜索了,没有找到我的问题的具体实现

无论如何,我目前正在学习JavaScript中的高阶函数,我正在学习array.prototype.filter函数。我理解它的目的(正如它的名字所暗示的那样),但我在实现这一点上遇到了困难:

假设我有一个名称数组,如下所示:

var names = ["Anna", "Bob", "Charles", "Daniel",
         "Allison", "Beatrice", "Cindy", "Fiona"];
function filterName(arrayOfNames, index, letter) {
    var filteredNames = arrayOfNames.filter(function(word) {
     return word[index] === letter;
    });
    return filteredNames 
}
然后我想,比方说,用所有以字母“A”开头的条目过滤这个数组。我知道我可以做到这一点:

var filteredNames = names.filter(function(word) {
    return word[0] === "A";
});

那就行了。但是我想说我不那么明确,让它更适合更多的情况。假设我想对过滤进行编程,这样我就可以说“仅返回索引[y]处有字母“x”的条目”,例如“仅返回索引[3]处有字母“F”的条目”


如何实现这一点?

您可以定义自己的过滤功能:

function filter(names, index, letter) {
    var filteredNames = names.filter(function(word) {
       return word.charAt(index) === letter;
    });
    return filteredNames;
}

您的筛选函数可以是任意复杂的,对于要保留的值,它返回
true
,对于要跳过的值,它返回
false
。例如:

var filteredNames = names.filter(function(word) {
    return word.length > 3 && word[3] === "Y";
});
更好的是,您可以动态创建回调函数,因为函数在JS中:

高阶函数,如
filter
map
将其他函数作为值,以帮助它们完成工作。现在,您可以通过构建一个函数数组并使用高阶函数将它们全部应用,从而实现更深入的重定向:

function filter(names, index, letter) {
    var filteredNames = names.filter(function(word) {
       return word.charAt(index) === letter;
    });
    return filteredNames;
}

为什么不创建一个函数来做您想要做的事情呢?从您的代码可以看出:

var names = ["Anna", "Bob", "Charles", "Daniel",
         "Allison", "Beatrice", "Cindy", "Fiona"];
function filterName(arrayOfNames, index, letter) {
    var filteredNames = arrayOfNames.filter(function(word) {
     return word[index] === letter;
    });
    return filteredNames 
}
因此,您可以将数组、索引和字母传递给它:

console.log(filterName(arrayOfNames, 3, 'x'));

我想regexp会更灵活

var filteredNames = names.filter(function(word) {
    return /^A/.test(word);
});
一种通用的使用方法

function filterMatches(words, regexp) {
    return words.filter(function (word) {
         return regexp.test(word);
    });
}

filterMatches(words, /^A/); // for letter A, index 0
filterMatches(words, /^.{3}B/); // for letter B, index 4

您可以创建自己的自定义函数

var array =["Anna", "Bob", "Charles", "Daniel", "Allison", "Beatrice", "Cindy", "Fiona"];
var matched_terms = [];
var search_term = "an";
search_term  = search_term.toLowerCase();
           array.forEach(item => {
                  if(item.toLowerCase().indexOf(search_term) !== -1 ){
                  console.log(item);
                  matched_terms.push( item ); 
      }

console.log(matched_terms);
})

您可以使用变量而不是硬编码的
A
value您需要为这些情况创建一个函数,并从过滤器内部调用它。例如
返回checkMyWord(indexOfLetter,letter,word);
希望我对您有意义“只返回索引[y]中有字母“x”的条目”,请仔细阅读问题。我仔细阅读了问题,这仍然是我的答案,因为它涵盖了问题的关注点。