2012-05-14 50 views
0

我是新来的JavaScript,并希望有关的代码片段一些建设性的批评。本示例使用用户输入的值搜索关联数组。有没有更好的方法来解决这个问题。什么会是一个更优雅的解决方案,同时仍然使用关联数组?谢谢。有没有一种优雅的方式来搜索关联数组在JavaScript中?

var myObject = [ 
    {id: 1, word: 'ant', definition: 'an insect with eight legs.'}, 
    {id: 2, word: 'cake', definition: 'a food made with flour and sugar.'}, 
    {id: 3, word: 'house', definition: 'a building where a family lives.'}, 
]; 

function search(arg){ 
    var count = 0; 
    for (var i = 0; i <= myObject.length; i++) { 
     if (myObject[i].word == arg) { 
      document.write(myObject[i].id + " - " + myObject[i].word + " - " + 
           myObject[i].definition + "<br>"); 
      count += 1; 
     } 
     else { 
      if (count != 1 && 
        myObject[i].word != arg && 
        i == myObject.length - 1) { 

       document.write("NOT FOUND!"); 
      } 
     } 
    } 
} 

var arg = prompt("Search For An Entry"); 
if (arg != null && arg.length != 0) { 
    search(arg); 
} 
+2

从我所看到的,你不使用关联数组,但经典之一。 –

+0

这些词是独一无二的吗?是的,你可以使用一个关联数组而不是常规数组。 – topp

回答

1

看起来不错。我唯一可以建议(这是一个非常小的改进)将缓存关联数组的长度循环在它之前,像这样:

for (var i = 0, len = myObject.length; i < len; i++) { 

你也可以移动,去年if声明检查搜索参数还没有被发现的for循环之外,像这样的:如果找到任何搜索PARAMS它结束for循环之前

for (var i = 0, len = myObject.length; i < len; i++) { 
    if (myObject[i].word == arg) { 
     document.write(myObject[i].id + " - " + myObject[i].word + " - " + myObject[i].definition + "<br>"); 
     count += 1; 
    } 

    if(i == len-1 && count > 0) return; 
} 

document.write("NOT FOUND!"); 

此代码退出搜索功能。这意味着只有当搜索结果为“未找到”时,才会运行在for循环之外退出的任何代码。

+0

谢谢艾略特。我喜欢你的方法,节省了必须继续循环直到结束。 –

0

试试这个方法:

var myObject = {'ant': {id: 1, word: 'ant', definition: 'an insect with eight legs.'}, 
     'cake' : {id: 2, word: 'cake', definition: 'a food made with flour and sugar.'}, 
     'house' : {id: 3, word: 'house', definition: 'a building where a family lives.'}, 
     }; 

function search(arg){ 
    var count = 0; 
    if (myObject[arg] != undefined) 
    { 
     document.write(myObject[arg].id + " - " + arg + " - " + myObject[arg].definition + "<br>"); 
    } 
    else 
    { 
     document.write("NOT FOUND!"); 
    } 
} 

,如果你有每字一个定义,这将只工作。如果你想有更多的,并且仍然能够召唤关联数组的力量,你可能会在字典变量更改为这样的事情:

var myObject = {'ant': [{id: 1, word: 'ant', definition: 'an insect with eight legs.'}, {id: 666, word: 'ant', definition: 'progeny of the devil'}], 
     'cake' : [{id: 2, word: 'cake', definition: 'a food made with flour and sugar.'}], 
     'house' : [{id: 3, word: 'house', definition: 'a building where a family lives.'}], 
     }; 

当然,改变的代码相应

+0

感谢您的意见,我肯定会试验这个想法。 –

0

这里是我拿吧:或

var i, found = 0; 

for (i = 0; i < myArray.length; i++) { 
    if(myArray[i].word === arg) { 
     document.write(myArray[i].id + " - " + myArray[i].word + " - " + myArray[i].definition + "<br>"); 
     found++; 
    } 
} 

if(found === 0) { 
    document.write("None found!"); 
} 

,而不是最终的if,你可能只是总是写找到的项目数:

document.write(found.toString() + " items found"); 
相关问题