防止数组添加重复对象

时间:2020-08-20 14:55:14

标签: javascript node.js arrays javascript-objects

我有此代码:

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' } 
  ]
}

我该如何解决这个问题?

2 个答案:

答案 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)