如何将数组中的每个元素与一个值进行比较?

时间:2018-08-22 15:44:40

标签: javascript arrays object javascript-objects

我有一个array,里面有多个objects。 它的结构如下:

const Instructor = [
  { ID: '141',
    InstructorNameAR: 'test',
    InstructorNameEN: 'Mohamed Ahmed',
    InstructorBriefAR: 'phd in chemistry',
    InstructorBriefEN: 'phd in chemistry' },
  { ID: '140',
    InstructorNameAR: 'test',
    InstructorNameEN: 'Mahmoud Ahmed',
    InstructorBriefAR: 'phd in chemistry',
    InstructorBriefEN: 'phd in chemistry' },
]

我想添加其他objects,但根据重复值ID过滤掉重复项。

我要添加的objects示例:-

  const InstructorInstance = {
    ID: 'ID',
    InstructorNameAR:   'NAMEAR',
    InstructorNameEN:   'NAMEEN',
    InstructorBriefAR:  'BRIEFAR',
    InstructorBriefEN : 'BRIEFEN'
  }

我使用此方法按ID进行过滤。 但这没有用,因为它仅将single的{​​{1}}值与我提供的值进行比较。这意味着它可能是array,但仍会添加,因为它没有检查每个duplicated object中是否存在它

array element

2 个答案:

答案 0 :(得分:2)

在确定是否存在重复项之前,必须首先循环整个数组。您可以为此使用forEach,但是everysome似乎很适合这种工作:

const test = Instructor.every(instance => instance.ID !== InstructorInstance.ID);
if(test) {
    Instructor.push(InstructorInstance);
}

这意味着如果Instructor中的每个对象都与ID具有不同的InstructorInstance,则将InstructorInstance推入Instructor

注意:您可以将测试直接放在if内,而不必将其存储在变量test中:

if(Instructor.every(instance => instance.ID !== InstructorInstance.ID)) {
    Instructor.push(InstructorInstance);
}

但这看起来不对吗?

答案 1 :(得分:1)

您可以使用some检查该对象是否已经存在,如果不存在,请添加它:

if (!Instructor.some(i => i.ID == instance.ID)) {
    Instructor.push(instance);
}