我想最终将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
答案 0 :(得分:1)
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