2015-02-23 109 views
0

有什麼方法可以搜索具有以特定char 開頭的元素而不循環數組的javascript數組。數組按第一個字符搜索

實施例:

var fruits = ["Banana", "Orange", "Apple", "Mango"]; 

從這個數組我想檢查的任何元素以字符「M」開始。 注意:不應循環數組。

+2

有沒有辦法。需要使用循環.. – 2015-02-23 06:57:35

+0

@ java-seekar在這裏不要帶作業 – ddw147 2015-02-23 07:02:39

+0

@ Java-Seekar在真實項目中沒有人會限制你使用循環。沒有人會在我的項目中說你不能使用循環 – ddw147 2015-02-23 07:08:08

回答

1

如果數組不包含對象或值不包含,然後使用可以加入數組創建一個字符串,然後使用正則表達式

var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
var exists = /,M/.test(fruits.join()); 
console.log(exists) 
+0

但我猜'join()'使用循環。 – void 2015-02-23 07:02:01

-1

沒有內置的功能,創建自定義的功能。

+0

你可以創建一個自定義函數嗎? – 2015-02-23 07:07:46

3

您可以使用.filter函數,但內部它仍然會使用循環。事實上,沒有辦法可以在沒有循環的情況下檢查完整的數組。

fruits.filter(function(item) { return item.substring(0, 1) == 'M'; }); 
+0

1爲了指出過濾器的真實性,我的意思是它也使用循環 – 2015-02-23 07:07:13

1

你能做到這一點的唯一方法是通過使它們關聯數組定義的子部分索引。

所以,當你初始化/加載數組時,你需要定義哪些字符在那裏。 這樣,您將只需要在你的價值觀的初始化或加載功能

mainIndex = new Array(); 
while(loadingarray.hasNext()) { 
    var next = loadingarray.getNext(); 
    var indexchar = next.charAt(0); 
    if(typeof mainIndex[indexchar] == 'undefined') { 
     mainIndex[indexchar] = new Array(); 
    } 
mainIndex[indexchar].push(next); 
} 
+0

確實 - 哈希表是滿足這個問題的(相當模糊的)要求的唯一方式。 – jdphenix 2015-02-23 07:16:02

+0

有時候哈希表是存儲事物的方式。我們當然不知道陣列有多大。有200萬個物品陣列可能會出現性能問題。我們不知道。但那是我猜測他不想循環的唯一原因。也許可以訪問數組中的數百萬客戶數據,然後找到一個客戶:P仍然,它必須加載,所以至少有一個循環級別......但是,嘿,內存很便宜:P – Tschallacka 2015-02-23 07:18:59

+0

我其實認爲問題可能是家庭作業產生 - 但仍然是一個有趣的問題。這是真的,哈希表不保證在碰撞情況下沒有循環。 – jdphenix 2015-02-23 07:20:19

0

使用此代碼

var fruits = ["Banana", "Orange", "Apple", "Mango"]; 
var match = fruits.filter(function (item, index, array) { 
    if(item.charAt(0) === "M") 
     console.log(item); 
}); 

http://jsfiddle.net/a02z99xg/4/