Array.length似乎不起作用; console.log显示否则

时间:2015-04-10 00:43:24

标签: javascript

我想最终将contactList写入页面,但即使console.log显示contactList正确接收从localStorage推送的联系人,其长度也保持为1!当我尝试迭代contactList以写入页面时,它没有按预期工作,我看到未定义值应该在哪里。

var contactList = [];
window.onload = init;
function init(){
    var data = window.localStorage.getItem("contacts");
    if(data){
        myData = JSON.parse(data);
        console.log("This is local storage:\n");
        console.log(myData);
        console.log("This is contact list before I push local storage:\n");
        console.log(contactList);
        contactList.push(myData);
        console.log("This is contact list after I push local storage:\n");   
        console.log(contactList);
        var j = contactList.length;
        console.log("This is the length of contact list:\n");
        console.log(contactList.length);

    }
}

这是我的控制台窗口的一个示例:

  

这是本地存储:

     

form.js(第12行)   [[[Object {firstname =" hi",lastname =" hi",number =" hi"}],Object {   firstname =" hi",lastname =" hi",number =" hi"}],Object {firstname =" hi",lastname = " hi",number =" hi"}]   form.js(第13行)

     

这是推送本地存储之前的联系人列表:

     

form.js(第14行)   []   form.js(第15行)

     

推送本地存储后,这是联系人列表:

     

form.js(第17行)   [[[[Object {firstname =" hi",lastname =" hi",number =" hi"}],Object {firstname =" hi& #34;,lastname =" hi",number =" hi"}],Object {firstname =" hi",> lastname =" hi",number =" hi"}]]   form.js(第18行)

     

这是联系人列表的长度:

     

form.js(第20行)   1

2 个答案:

答案 0 :(得分:1)

这是push的预期结果。看起来您想使用concat

push会将任何参数附加到数组末尾的新元素。如果添加字符串,则会添加字符串。如果你添加一个数组,它将添加一个数组...作为最后一个元素。它不会使得到的数组变平。另一方面,concat将连接两个数组并返回一个新数组。原来的数组不会改变。

答案 1 :(得分:0)

var a = [1]

console.log(a.length) // 0

var b = [2]

var c = a.push(b)

console.log(c) // [1, [2]] 

console.log(c.length) // 2

尝试使用concat():

var a = [1]

console.log(a.length) // 1

var b = [2]

var c = a.concat(b)

console.log(c) // [1, 2] <<< Desired behaviour

console.log(c.length) // 2