首页 > 解决方案 > 创建函数以在 if 语句中将对象添加到具有多个条件的数组

问题描述

我正在尝试创建一个函数,将新的动物对象添加到已经存在的动物数组中。该代码似乎工作正常,只是它添加了 3 次新对象。我猜它一定与我的 if 语句中的 3 个条件有关。我不知道怎么写才能让它只添加一次新元素。

var pig = {
  species: 'pig',
  name: 'bob',
  noises: ['oink', 'snort', 'fart', 'squeal']
}
//i function
//o adds new animal to animals array
//c takes 2 parameters, must check for unique name, name property >0, species property >0
//signature of 'function add(animals, animal) {'
function add(animals, animal) {
  for (var i = 0; i < animals.length; i++) {
    if ((animal.name.length > 0) && (animal.species.length > 0) && (animal.name !== animals[i].name)) {
      animals.push(animal);
    }
  }
}

// console.log(animals)

add(animals, pig)

标签: javascriptarraysloopsif-statementjavascript-objects

解决方案


您可以做的是删除 for 循环并使用“查找”方法在数组中搜索具有提供的动物名称的动物。

function add(animals, animal) {
    const animalExists = animals.find((a) => a.name === animal.name);
    if ((!animalExists) && (animal.name.length > 0) && (animal.species.length > 0)) {
        animals.push(animal);
    }
}

推荐阅读