Javascript按此查找OR/ELSE按此查找

Javascript Find by this OR/ELSE find by this

是否有更简洁的方法来查找数组中与条件匹配的第一个值,如果找不到该值,请尝试其他值?

const animals = ['cat', 'dog', 'bird', 'snake'];

let favoriteAnimal = animals.find(animal => animal === 'cat');

if (!favoriteAnimal) favoriteAnimal = animals.find(animal => animal === 'dog');

稍微更新了我的问题。如果 'cat' 不在数组中,则查找 'dog'。如果 'cat' 或 'dog' 没有找到,只是 return undefined.

如果您只查找字符串值,您可以这样做:

const animals = ['dog', 'bird', 'snake'];
const animalsToTry = ['cat', 'dog'];

let favoriteAnimal = animalsToTry.find(animal => animals.includes(animal));

console.log(favoriteAnimal); // 'dog'

如果您希望根据 属性 匹配对象:

const animals = [{id: 'dog'}, {id: 'bird'}, {id: 'snake'}];

function findFirstMatchingAnimal(animals, animalIds) {
  for (let id of animalIds) {
    const animal = animals.find(a => a.id === id);
    if (animal) return animal;
  }
}

console.log(findFirstMatchingAnimal(animals, ['cat', 'dog']));    // { id: 'dog' }
console.log(findFirstMatchingAnimal(animals, ['bird', 'dog']));   // { id: 'bird' }
console.log(findFirstMatchingAnimal(animals, ['cow', 'monkey'])); // undefined

假设您的键列表 (favourites) 按“优先级”从高到低排序,您可以从 animals、[=14 的列表中迭代找到 favouriteAnimal =]

function findFavourite(animals, favourites) {
  // assume that `favourites` is ordered from highest to lowest "priority"

  for (const favourite of favourites) {
    if (animals.includes(favourite)) {
      return favourite;
    }
  }

  return null;
}

const animals = ['dog', 'bird', 'snake'];

console.log(findFavourite(animals, ['cat', 'dog']));  // 'dog'
console.log(findFavourite(animals, ['cat', 'bird', 'dog']));  // 'bird'
console.log(findFavourite(animals, ['cat', 'mouse']));  // null