2015-12-23 52 views
-1

假設我們有2列:如何使用另一個數組和regexp過濾數組?

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

var a2=[pencils,box] 

,我只需要「MAX」作爲我的合成陣列,即:

var result = [max] 

這意味着我要減(即套差)所有在陣列的每個字(即,元素),這意味着我想消除盒(ES)(A1元件),它是的「盒子」字(a2的元件)的(複數形式)的可能性(裝置。複數形式)。所以爲了得到我想要的結果(即「max」),我需要列出所有的元素(包括它的複數形式)IE:box(es)(同樣適用於鉛筆)

所以我的問題是我如何創建一個循環(或功能)相匹配,其並刪除陣列即箱(ES)或鉛筆(S) 的每一個元素(包括它的複數形式),這樣我可以有「最大」作爲我的結果數組!

我希望這澄清了我的問題(如何使用另一個陣列和正則表達式來過濾陣列)!

+0

陣列「減法」可以輕鬆完成。但是,你如何知道單詞的複數形式?這不是一個小問題。 –

+0

僅獲取不在數組中的項目很簡單。挑戰是複數形式。這是簡單的S或ES添加到單詞進行比較,但也有很多複數形式,其中簡單地添加S或ES不會做。你是否滿意只是在單詞中添加s和es,並假設它們是複數形式?如果是這樣,那麼這是一件容易的工作。 – Will

回答

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

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建立這個功能。

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

var result = _.filter(a1, function(obj){ return !_.findWhere(a2, obj); }); 

結果= [MAX]用下劃線JS庫。

+0

OP沒有標註下劃線的答案應該是對JavaScript這裏 –

相關問題