Ad

Javascript Find By This OR/ELSE Find By This

- 1 answer

Is there a cleaner way to find the first value in an array that matches a condition and if that value isn't found, try a different value?

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

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

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

Updated my question a bit. If 'cat' isn't in the array, then look for 'dog'. If 'cat' or 'dog' are not found, just return undefined.

Ad

Answer

If you're only looking for string values, you could do this:

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

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

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

And if you're looking to match objects based on a property:

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

Ad
source: stackoverflow.com
Ad