循环遍历对象数组返回'undefined'

时间:2016-02-03 18:32:48

标签: javascript arrays json javascript-objects

我有两个数组。

var fruits = [];

var tasks = [];

当我在文本字段中输入一个值时,它会触发一个将值推送到数组的函数。然后它会触发一个单独的函数,该函数对数组进行字符串化并将其保存在本地存储中。 (“when”是document.addeventlistener的别名)。

when(toDo, "keypress", function(event){
  if (event.key == "Enter" || event.keyCode == 13) {
    pushArray();
    stringifyArray(fruits);
    toDo.value = "";
  }
});

// function that adds new task to the array
function pushArray(){
  var newtask = new Task(toDo.value, "No note yet");
  fruits.push(newtask);  
}

// function that stringifies given array and stores it in local storage
    function stringifyArray(array){
      var makeString = JSON.stringify(array);
      var setItem = localStorage.setItem("tasks", makeString);
    }

当我遍历第一个数组并尝试在div中显示object.Name和.Note时,它可以正常工作:

when(button, "click", function(event){
  demolist.innerHTML = "";
   for(i=0; i< fruits.length; i++){
     demolist.innerHTML += fruits[i].Name + " " + fruits[i].Note + "<br>";
   }
});

但是当我触发一个解析该数组的函数时,填充第二个并尝试以相同的方式遍历它,我得到“undefined undefined”,即使我可以看到数组包含我检查时提交的所有对象控制台。

function parseArray(){
  var getArray = localStorage.getItem("tasks");
  var parseObj = JSON.parse(getArray);
  tasks.push(parseObj);
}



 when(button2, "click", function(event){
function parseArray()
      demolist2.innerHTML = "";
       for(i=0; i< tasks.length; i++){
         demolist2.innerHTML += tasks[i].Name + " " + tasks[i].Note + "<br>";
       }
    });

https://jsfiddle.net/bjxs3LdL/ (没有精彩的解决方案请)

我是编码和stackoverflow的新手,请原谅长篇文章。

2 个答案:

答案 0 :(得分:1)

通过更改

修复您的parseArray()功能
tasks.push(parseObj);

tasks = parseObj;
编辑:对于所有的编辑很抱歉,很难将我的控制流包裹起来。要解决第一个备忘录未保存的问题,请在stringifyArray(fruits);功能的末尾添加submitNote()来电。

答案 1 :(得分:0)

parseArray来电是错误的,请尝试重新审核button2听众:

when(button2, "click", function(event){
      parseArray();
      demolist2.innerHTML = "";
       for(i=0; i< tasks.length; i++){
         demolist2.innerHTML += tasks[i].Name + " " + tasks[i].Note + "<br>";
       }
    });

否则,您的代码需要重新设计,但这又是另一个机会。