如何使用另一个数组和regexp过滤数组?

时间:2015-12-23 04:59:47

标签: javascript arrays regex filter

假设我们有2个数组:

var a1=[pencil,pencils,boxes,max]

var a2=[pencils,box]

我只需要“max”作为我的结果数组,即:

var result = [max]

这意味着我想减去(即,集合的差异)数组中每个单词(即元素)的所有可能性(均值。复数形式),这意味着我想要消除box(es)(a1元素)是“box”(复数形式)的单词“box”(a2的元素)。

因此,为了获得我想要的结果(即“max”),我需要释放所有元素(包括其复数形式)IE:box(es)(铅笔也一样)

所以我的问题是如何创建一个循环(或函数)来匹配和删除数组的每个元素(包括它的复数形式),即box(es)或pencil(s) 所以我可以将“max”作为我的结果阵列!

我希望这澄清了我的问题(如何使用另一个数组和正则表达式过滤数组)!

2 个答案:

答案 0 :(得分:1)

您可以使用Array.prototype.filter执行此操作:

var a1=['pencil', 'pencils', 'boxes', 'max'];
var a2=['pencils', 'box'];

var result = a1.filter(function(item) {
    if (isPluralForm(item))
        return a2.indexOf(item) === -1 && a2.indexOf(singleFormOf(item)) === -1;
    else
        return a2.indexOf(item) === -1 && a2.indexOf(pluralFormOf(item)) === -1;
});

就这么简单。我们只想获得a2a1中不存在的单个或复数形式的项目。

isPluralpluralFormOfsingleFormOf怎么样?它是由你决定。您需要自己实施或找到第三方解决方案。

例如,您可以如何实施pluralFormOf

var irregularPluralForms = {
    'sheep': 'sheep', // same form
    'foot': 'feet' // irregular form
};

function pluralFormOf(word)
{
    if (irregularPluralForms[word] !== undefined)
        return irregularPluralForms[word];

    if (word.substr(word.length - 1) === 'y')
        return word.substr(0, word.length - 1) + 'ies';

    if (word.substr(word.length - 1) === 's'
     || word.substr(word.length - 1) === 'x'
     || word.substr(word.length - 1) === 'z'
     || word.substr(word.length - 2) === 'ch'
     || word.substr(word.length - 2) === 'sh')
        return word + 'es';

    return word + 's';
}

我使用the following article来构建此功能。

答案 1 :(得分:0)

var a1=[pencil,pencils,boxes,max];
var a2=[pencils,box];

var result = _.filter(a1, function(obj){ return !_.findWhere(a2, obj); });
  使用Underscore JS库

result = [max]。