是否有更简洁的方法来查找数组中与条件匹配的第一个值,如果找不到该值,请尝试其他值?
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。
答案 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