Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种优雅的方法可以在JavaScript中搜索关联数组?_Javascript_Arrays - Fatal编程技术网

有没有一种优雅的方法可以在JavaScript中搜索关联数组?

有没有一种优雅的方法可以在JavaScript中搜索关联数组?,javascript,arrays,Javascript,Arrays,我是JavaScript新手,希望对代码片段提出一些建设性的批评。此示例使用用户输入的值搜索关联数组。有没有更好的方法来解决这个问题;在仍然使用关联数组的情况下,什么是更优雅的解决方案?谢谢 var myObject = [ {id: 1, word: 'ant', definition: 'an insect with eight legs.'}, {id: 2, word: 'cake', definition: 'a food made with flour and su

我是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);
} 
var myObject=[
{id:1,单词:“蚂蚁”,定义:“一种有八条腿的昆虫。”,
{id:2,单词:'蛋糕',定义:'一种用面粉和糖做成的食物。},
{id:3,单词:'house',定义:'一个家庭居住的建筑。},
];
函数搜索(arg){
var计数=0;

for(var i=0;i看起来不错。我唯一能建议的(这是一个非常小的改进)是在循环之前缓存关联数组的长度,如下所示:

for (var i = 0, len = myObject.length; i < len; i++) {
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!");
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.'}],
        };
如果在结束
for
循环之前找到了任何搜索参数,则此代码将退出搜索功能。这意味着在
for
循环之外退出的任何代码仅在搜索结果为“not found”时运行。

请尝试以下方法:

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 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!");
}

据我所见,你使用的不是关联数组,而是经典数组。单词是唯一的吗?是这样,你可以使用关联数组而不是常规数组。谢谢你的输入,我肯定会尝试这个想法。谢谢Elliot。我喜欢你的方法,它省去了继续循环直到结束的麻烦。
document.write(found.toString() + " items found");