0
function Todo(id, task, who, dueDate) {
    this.id = id;
    this.task = task;
    this.who = who;
    this.dueDate = dueDate;
    this.done = false;
}    

// more code that adds the todo objects to the page and to the array todos

function search() {
    for (var i = 0; i < todos.length; i++) {
        var todoObj = todos[i];
        console.log(todoObj.who); //shows both jane and scott
        console.log(todoObj.task); // shows both do something and get milk
    }
    var searchTerm = document.getElementById("search").value;
    searchTerm = searchTerm.trim();
    var re = new RegExp(searchTerm, "ig");
    var results = todoObj.who.match(re);
    if (searchTerm == null || searchTerm == "") {
        alert("Please enter a string to search for");
        return;
    } else {
        alert(results);
    }
} 

これは、ユーザーが検索バーに入力した内容を、コードの前半で作成したオブジェクトと一致させようとしている検索機能です。それらは、私がオブジェクトに与えた「who」および「task」パラメーターと一致する必要があります。つまり、1つのオブジェクトはwho:ジェーンタスク:何かを実行し、もう1つのオブジェクトはwho:scottタスク:ミルクを取得することです。問題は、私の最後のアラートでは、ジェーンではなくスコットにしか一致できないことです。スコットは私が最後に追加したものです。ループを変更したり、検索条件を変更したりする必要がある方法はありますか?

4

1 に答える 1

1

あなたの問題は、アイテムをループしているが、その後のtodoObjループを使用していることです。そのtodoObjため、配列の最後の項目のみが保持されます。少し再編成する必要があります...次のようなことを試してください:

function search() {
    var searchTerm = document.getElementById("search").value;
    searchTerm = searchTerm.trim();

    if (searchTerm == null || searchTerm == "") {
        alert("Please enter a string to search for");
        return;
    } else {
        var todoObj = undefined,
            results = undefined,
            re = new RegExp(searchTerm, "ig");

        for (var i = 0; i < todos.length; i++) {
            todoObj = todos[i];
            results = todoObj.who.match(re);
            if (results) {
                alert("You found " + todoObj.who + ", who needs to " + todoObj.task + " by " + todoObj.dueDate);
                return;
            }
            console.log(re.lastIndex);
        }

        alert("You didn't match anyone");
    }
}

あなたが望むと思うように動作する例を次に示します: http://jsfiddle.net/sHSdK/2/

于 2013-02-20T21:33:12.727 に答える