2013-10-24 25 views
-1

我有javascript数组。 我需要匹配并从这个数组中选择单词。如何匹配数组javascript中的单词?

var tomatch = ""; 

var sets= new Array() 
    sets[0]='nnd'; 
    sets[1]='nndha'; 
    sets[2]='ch'; 
    sets[3]='gn'; 

的例子... 时,

var tomatch = "nn"; 

它需要tomatchsets[0] & sets[1]
写出来的结果。

tomatch = "c",它应该与sets[2] 我该怎么做?

那里我不需要oder。
如果tomatch = "dh",它也可以是sets[1]

我没有关于JavaScript好knowlage。

如何做到这一点?

+3

Java **不是** JavaScript。 –

+0

使用'for()'循环使用'indexOf()'。请说明你已经尝试了什么,我们不在这里为你做你的工作。 – Barmar

+0

我知道巴尔玛,抱歉我没有很好的关于JavaScript的知识。所以我希望通过这样做来学习它。 - 即时通讯尝试为语言构建eazy打字方法。 – Milan

回答

2

indexof(“要匹配的字符串”)将返回字符串的索引,如果找不到字符串,则返回-1。只需遍历数组并检查indexof(“要匹配的字符串”)的返回值是否为-1。

sets[i].indexOf("nn")!=-1 
0
var tomatch = "nn"; 
var sets= new Array() 
    sets[0]='nnd'; 
    sets[1]='nndha'; 
    sets[2]='ch'; 
    sets[3]='gn';  
for(var i=0; i < sets.length ; i++){ 
     if(sets[i].indexof(tomatch) !== -1){ 
     return sets[i]; 
     } 
    } 
0

使用过滤器:

> sets.filter(function(x) { return x.indexOf("nn") !== -1; }) 
[ 'nnd', 'nndha' ] 
> sets.filter(function(x) { return x.indexOf("c") !== -1; }) 
[ 'ch' ] 
0

它应该是:

function isInArray(string){ 
    return sets.indexOf(string)>-1;  
    } 

    alert(isInArray("nn")); 

或使用jQuery:

jQuery.inArray("nnd",sets); 

它会返回“NND”

0

这并不像@ Nirk的解决方案,整洁(我总是忘记Array.filter),但你可以按他的回答Array.filter取代我的测试功能的指标:

function test(a, f) { 
    var i = 0, 
     result = []; 

    for (i=0; i<a.length; i++) { 
    result.push(f(a[i])); 
    } 

    return result; 
} 

function txtMatch(s) { 
    var pattern = new RegExp('' + s + ''); 
    return function(t) { 
    return pattern.test(t); 
    }; 
} 

var sets= new Array() 
sets[0]='nnd'; 
sets[1]='nndha'; 
sets[2]='ch'; 
sets[3]='gn'; 

var toMatchFirst = test(sets, txtMatch('nn')); 
var toMatchSecond = test(sets, txtMatch('c')); 

console.log(toMatchFirst.join(', ')); 
console.log(toMatchSecond.join(', ')); 

我刚刚创建了一个快速字符串匹配函数,然后循环遍历数组,测试每个数组,并返回结果数组。

2

使用下面的函数返回匹配的话,否则警报no match数组:

function find_match(to_match) 
{ 
    match_array=new Array(); 
    for(i in sets) 
    { 
     if(sets[i].indexOf(to_match)!=-1) 
      match_array.push(sets[i]); 
    } 
    return (match_array.length==0? alert('No match'): match_array); 
} 

要找到匹配的发言权字符串'n'需要调用find_match('n')将返回nnd,nndha,gn

+0

为什么要使用内联脚本标记和document.write来显示结果? – Todd

+0

@Todd只是给出了使用说明。删除它。现在它应该得到** downvote **吗?你有没有发现其他缺陷? –

+0

不行,就是这样。 – Todd

0

谢谢大家,但这是我想要的,我认为匹配cmd适合我的任务。

var sugest = ""; 
    var matchkeyword = "nn"; 

    var sets= new Array() 
    sets[0]='nnd'; 
    sets[1]='nndha'; 
    sets[2]='ch'; 
    sets[3]='gn'; 
    sets[4]='nch'; 
    sets[5]='fu'; 
    sets[6]='Nui'; 


for(var i=0; i < sets.length ; i++){  

     if(sets[i].match(matchkeyword) != null) { 
        sugest = sugest + "<br>" + sets[i]; 
     } 
} 

y=document.getElementById("sugdiv"); 
y.innerHTML = sugest; 
+1

使用document.write返回结果不是一个好主意。如果不小心使用,document.write可能具有破坏性。依靠它来插入DOM不是一个好习惯。而这种蛮力方法对此完全没有必要。 – Todd

+0

是的..谢谢@Todd。即时通讯使用innerHTML进行这项工作。 – Milan