2012-10-17 51 views
-1

我剛想出了一個inArray實現的JavaScript,它工作正常。 它的怪異,但很短,我也有這種感覺有什麼東西不對的地方,但我不知道它是什麼:使用連接和匹配在JavaScript中實現inArray有什麼問題?

Array.prototype.inArray = function (itm) { 
    return this.join("|").match(new RegExp('\\b'+itm+'\\b','ig') ); 
} 

UPDATE:這應該是一個InArray的一般實施特徵。我不知道這是比較昂貴,做一個循環或創建一個正則表達式

+0

您的實施的要求是什麼?我們應該比較什麼標準?除非你定義什麼是「正確」,否則我們如何知道是否有什麼「錯誤」? –

+1

你必須逃避每個元素和特殊正則表達式字符的搜索詞。試想如果一個元素包含'|'或'*'或'.'。因此,如果您要反覆遍歷所有元素,則可以直接比較它們。 –

+0

它只適用於字符串? – gosukiwi

回答

0

我不知道你的實現需求是什麼,但注意以下幾點:

  • 你會匹配Array成員的字符串化版本,而不是實際成員

  • \\b將允許包括標點符號在內的任何單詞中斷給出誤報。

  • 它只會在陣列單個詞條目是有用的,否則你可能會得到誤報

  • 你會被返回null或和陣列「匹配」的。不知道這是你想要的。

我確信這些只是表面。

如果您正在實現一個非常狹窄的功能,它可以工作,但不適合一般用途。

+0

目前我只是用它來檢查serialno類型的數據,但我很確定這將是昂貴的,因爲一個大樣本。 – brianff

0

使用underscore.js intersection()方法來了解您的數組包含的元素,甚至是一系列元素:

if(_.intersection(yourArray, [item]).length){ 
    //do stuff 
} 

你可以將它們推到一個數組過檢查多個項目。它也涵蓋了任何類型的對象