我有此代码:
const user = {courses: [
{id: '1A', code: '111'},
{id: '2B', code: '222'}
]}
const courseID = '1A'
const course = {id: '1A', code: '111'}
for(var i=0; i<user['courses'].length; i++) {
var course_ID = user['courses'][i]['id']
if (courseID !== course_ID) {
user['courses'].push(course)
break
}
}
console.log(user)
运行代码后,我希望得到以下结果:
{
courses: [
{ id: '1A', code: '111' },
{ id: '2B', code: '222' }
]
}
但是它显示了这个结果:
{
courses: [
{ id: '1A', code: '111' },
{ id: '2B', code: '222' },
{ id: '1A', code: '111' }
]
}
我该如何解决这个问题?
答案 0 :(得分:4)
您可以使用不同的方法检查数组中的对象
例如,您可以使用find来确定数组中是否存在对象
// finding element inside array `courses` with id === courseID
const arrayItem = user.courses.find(item => item.id === courseID)
// if element not found
if(!arrayItem) {
user.courses.push(course)
}
答案 1 :(得分:1)
之所以会这样,是因为在循环中您正在执行ID检查。因此,由于不满足条件,因此第一次运行将不会添加也不中断循环。但是在第二次运行中,第二条路线的ID将不匹配,您将推送到数组。您必须稍微改善自己的逻辑才能获得理想的结果。尝试改用find来检查要添加的项目在数组中是否已经存在
const user = {
courses: [
{id: '1A', code: '111'},
{id: '2B', code: '222'}
]
}
const courseID = '1A'
const course = {id: '1A', code: '111'};
const courses = user.courses;
const courseExists = courses.find(course => course.id == courseID);
if (!courseExists) {
courses.push(course);
};
console.log(user)