Return 小写比较后的匹配元素?

Return matching elements after comparing in lower case?

我有这个数组:

var mainArray = ["Title", "AssignedTo", "IssueStatus", "Priority", "Comment", "Category", "RelatedIssues", "V3Comments", "TaskDueDate", "Attachments"]

我需要通过将它们与对应的小写字母进行比较来找到这些元素

var fields = ["title", "comment"];

基本上,我需要找出 fields 是否包含在 mainArray 和 return 来自该数组的大写值中:["Title", "Comment"]

var mainArray = ["Title", "AssignedTo", "IssueStatus", "Priority", "Comment", "Category", "RelatedIssues", "V3Comments", "TaskDueDate", "Attachments"]

var fields = ["title", "comment"];

var filtered = mainArray.filter(function(elem){
 return fields.indexOf(elem.toLowerCase()) != -1; 
});

如果小写值包含在 fields 数组中,您可以在检查后过滤该值。

var mainArray = ["Title", "AssignedTo", "IssueStatus", "Priority", "Comment", "Category", "RelatedIssues", "V3Comments", "TaskDueDate", "Attachments"],
    fields = ["title", "comment"],
    result = mainArray.filter(a => fields.includes(a.toLowerCase()));

console.log(result);

ES5

var mainArray = ["Title", "AssignedTo", "IssueStatus", "Priority", "Comment", "Category", "RelatedIssues", "V3Comments", "TaskDueDate", "Attachments"],
    fields = ["title", "comment"],
    result = mainArray.filter(function (a) {
        return fields.indexOf(a.toLowerCase()) + 1;
    });

console.log(result);

只需 运行 array with for() 并根据需要将结果收集到外部变量中,如下所示:

    var need = [];
    for(var i in yourArray){
    if(){ // compare function
    // add to "Need" array
    }
    }
// print the result

另外,你可以把它包装到函数中。 如果你有一个大阵列更好地使用过滤器。但是如果你有一个巨大的数组,最好使用 ajax 和后端脚本。

您可以使用这个 ES6 函数,它利用地图来获得更好的性能:

function getMatches(a, b) {
    var mp = new Map(a.map( s => [s.toLowerCase(), s]));
    return b.map(mp.get, mp);
}

// Sample data and call
var mainArray = ["Title", "AssignedTo", "IssueStatus", "Priority", "Comment", "Category", "RelatedIssues", "V3Comments", "TaskDueDate", "Attachments"];
var fields = ["title", "comment"];
console.log(getMatches(mainArray, fields));

这将 return 与第二个参数数组一样多的值,undefined 值未找到匹配项。如果您不想知道哪些条目失败了,而只想知道那些匹配的条目,请添加过滤器:

    return b.map(mp.get, mp).filter(s => s);

您可以使用Array#filter方法。见下文。

var mainArray = ["Title", "AssignedTo", "IssueStatus", "Priority", "Comment", "Category", "RelatedIssues", "V3Comments", "TaskDueDate", "Attachments"];


var fields = ["title", "comment"];

var res = mainArray.filter(function(v, i) {
     return fields.includes(v.toLowerCase());
});

console.log(res);