假设我们有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”作为我的结果阵列!
我希望这澄清了我的问题(如何使用另一个数组和正则表达式过滤数组)!
答案 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;
});
就这么简单。我们只想获得a2
中a1
中不存在的单个或复数形式的项目。
isPlural
,pluralFormOf
和singleFormOf
怎么样?它是由你决定。您需要自己实施或找到第三方解决方案。
例如,您可以如何实施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]。