Ad
Javascript Find By This OR/ELSE Find By This
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
Related Questions
- → How to update data attribute on Ajax complete
- → October CMS - Radio Button Ajax Click Twice in a Row Causes Content to disappear
- → Octobercms Component Unique id (Twig & Javascript)
- → Passing a JS var from AJAX response to Twig
- → Laravel {!! Form::open() !!} doesn't work within AngularJS
- → DropzoneJS & Laravel - Output form validation errors
- → Import statement and Babel
- → Uncaught TypeError: Cannot read property '__SECRET_DOM_DO_NOT_USE_OR_YOU_WILL_BE_FIRED' of undefined
- → React-router: Passing props to children
- → ListView.DataSource looping data for React Native
- → Can't test submit handler in React component
- → React + Flux - How to avoid global variable
- → Webpack, React & Babel, not rendering DOM
Ad