2015-02-23 78 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/