比较数组中的对象

问题描述

我有一个对象数组

let pets = [
    {type: 'dog',name: 'Bernie'},{type: 'cat',name: 'Bonnie'},{type: 'lizard',name: 'heartache'},{type: 'dog',name: 'spinach'}
];

我正在编写一个函数,它接受这个数组,如果所有类型都相同,则返回 true,否则返回 false。

这是我尝试过的:

    for (let i = 0; i < pets.length; i++) {
        if (pets[i].type != pets[i + 1].type) {
            return false;
        } else {
            return true;
        }
    }

我认为这会奏效。这不是遍历循环并将第一个对象的类型与下一个对象的类型进行比较吗?

我也试过

for(let i = 0;i < pets.length;i++){
      let petone = pet[i];
      let petNext = pet[i+1];
      if(petone[i].type != petNext[i].type){
        return false;
      }else{
        return true;
 }
}

我觉得我很接近。我将如何比较宠物类型并返回 true 或 false。

解决方法

您只需要在循环完成后return true,否则无论如何您都会在第一次迭代中返回。

在比较之前,您还需要确保您要迭代的项目之后的项目存在,因此不要迭代到最后,而是在最后一个之前迭代。

for (let i = 0; i < pets.length - 1; i++) {
    if (pets[i].type != pets[i + 1].type) {
        return false;
    }
}
return true;

另一种方法:

const { type } = pets[0];
return pets.every(p => p.type === type);