Javascript 通过这个查找 OR/ELSE 通过这个查找

时间:2021-04-05 18:35:14

标签: javascript find

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

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',则返回 undefined。

2 个答案:

答案 0 :(得分:4)

如果你只是在寻找字符串值,你可以这样做:

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

答案 1 :(得分:1)

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

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