2017-01-08 152 views
0

我想创建一个数组的对象。 我已经将它定义为:追加到Javascript对象

work = { 
    'jobs': [{ 
     'employer': 'ABC', 
     'jobPosition': 'FrontEndEngineer', 
     'experience': '1 year', 
     'city': 'Mumbai' 
    }] 
}; 

因为它是一个数组我试图把它添加到下一个位置

work.jobs[1].employer="QWE"; 
work.jobs[1].jobPosition = "Web Dev Intern"; 
work.jobs[1].experience = "6 months"; 
work.jobs[1].city = "Bengaluru"; 

,互相安慰的工作对象,它显示错误:

Uncaught TypeError: Cannot set property 'employer' of undefined

我在做什么错?

+0

我想在数组中追加另一个对象,而不是替换它。 –

+0

您必须设置'work.jobs [1] = {};'才能设置其属性。 –

+0

您应该1)使用所需的属性初始化一个新对象并追加它,或2)创建一个空对象,追加该对象,然后尝试初始文章中的代码。问题在于'work.jobs [1]'不存在,因此'undefined'。这就是你得到这个错误的原因。 –

回答

2

尝试推:

new_job = { 
    'employer': 'QWE', 
    'jobPosition': 'Web Dev Intern', 
    'experience': '6 months', 
    'city': 'Bengaluru' 
} 

work.jobs.push(new_job) 
0

work.jobs[1]还不存在,目前undefined。因此,访问它的.employer属性会引发错误。使用此初始化work.jobs[1]

work.jobs[1] = { 
    'employer': 'QWE', 
    ... 
}; 

,或者

work.jobs.push({ 
    'employer': 'QWE', 
    ... 
}); 

var work = { 
 
    'jobs': [{ 
 
    'employer': 'ABC', 
 
    'jobPosition': 'FrontEndEngineer', 
 
    'experience': '1 year', 
 
    'city': 'Mumbai' 
 
    }] 
 
}; 
 

 

 
work.jobs.push({ 
 
    'employer': 'QWE', 
 
    'jobPosition': 'Web Dev Intern', 
 
    'experience': '6 months', 
 
    'city': 'Bengaluru' 
 
}); 
 

 
console.log(work);

0

可以使用Array.prototype.push方法。这可以让您推送整个定义的对象,而不是通过深度引用添加。

let work = { 
    'jobs': [{ 
     'employer': 'ABC', 
     'jobPosition': 'FrontEndEngineer', 
     'experience': '1 year', 
     'city': 'Mumbai' 
    }] 
}; 

const job = { 
    'employer': 'QWE', 
    'jobPosition': 'Web Dev Intern', 
    'experience': '6 months', 
    'city': 'Bengaluru' 
}; 

work.jobs.push(job); 

console.log(work); 
// jobs: Array 
// 0: {employer: "ABC", jobPosition: "FrontEndEngineer", experience: "1 year", city: "Mumbai"} 
// 1: {employer: "QWE", jobPosition: "Web Dev Intern", experience: "6 months", city: "Bengaluru"}