2017-05-16 18 views
1

私のコードの中で、私はバグに遭遇しました。foreachループJavaScriptが動作しません

このjavascriptコードを実行し、コンソールから出力される内容を確認します。

私はtodoリストを持っています。私は新しいものをputしたいと思っています。私はそれから新しいものをもう一度打つことになるでしょう。

今、配列[0]と[1]の2つの項目が正しいはずですか?

アイテムを削除しようとすると機能しません。私は2回のような削除キーの用語を使用して、それが再び働くためにリストをヒットしなければなりませんか? Idkは私の側のバグだけど、javascriptアプリケーションを実行すると、HTMLページでkeytermsを使い、新しいことを追加してリストアップしてから削除しようとします。それは動作しますが、最初の試行では動作しません。

警告連続quitまでオープンアラートが入力され、ブラウザの原因となります

var todos = [""]; 
 
var input = prompt("What would you like to do today?"); 
 

 
while (input !== "quit") { 
 
    if (input === "list") { 
 
    todos.forEach(function(todo, i) { 
 
     console.log(i + ": " + todo); 
 
    }); 
 
    } else if (input === "new") { 
 
    var newTodo = prompt("Enter new thing to do"); 
 
    todos.push(newTodo); 
 
    } else if (input === "delete") { 
 
    var index = prompt("Enter index of todo to delete"); 
 
    todos.splice(index, 1); 
 
    } 
 

 
    input = prompt("What would you like to do?"); 
 
} 
 
console.log("Ok, you have quit the application");
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <title>Todo List</title> 
 

 
</head> 
 

 
<body> 
 
    <h1>To Do List</h1> 
 
    <ul> 
 
    <li>"new" - Add A Todo</li> 
 
    <li>"list" - List all Todos</li> 
 
    <li>"Delete" A Specific Todo</li> 
 
    <li>"quit" - quit the application</li> 
 

 

 
    </ul> 
 
</body> 
 

 
</html>

答えて

3

それはあなたが否定的な結果を生成するためにやっていることを伝えるのは難しいのですが、ここで私のベストです推測:

var todos = [""];は、配列が空の文字列で始まることを意味します。todos[0]var todos = [];で配列を初期化する必要があります。

+0

あなたは絶対に正しいです!それは今働きます! ""内部に配列を持っていたら、すでに0でインデックスを開始しました。私は、0の髪の毛ではなく、1のインデックスを持つ最初のアイテムを大声で削除する理由を自分自身に尋ね続けました。ありがとう!! –

+0

スポットがあります!それも私が気づいた最初のことです。空の配列を 'var todos = [];'(推奨)として、あるいは 'var todos = new Array();'のように初期化する必要があります。 – cezar

+0

私は3分で私にbtwをさせるときに私はこの答えを受け入れるだろう:) –

関連する問題