Есть ли сокращение для `if Array.find`?

1

Я хочу сделать это равным:

const arr = [{id: 1}, {id: 2}, {id: 3}]; 

const item = arr.find(v => v.id===2); 

if (item) {
   console.log(item); 
}

Есть ли сокращенное выражение, которое я могу сделать, где я могу оценить, был ли найден элемент, и использовать этот элемент внутри блока?

Что-то вроде:

if (const item = arr.find(v => v.id ===2) {
    console.log(item); 
}
Теги:

3 ответа

2

Да, только простая настройка для вашего кода - изменение item к let объявленных вне если if так, что он может быть переназначен в состоянии:

const arr = [{id: 1}, {id: 2}, {id: 3}];
// not actually necessary, but leaving it out will implicitly assign to global object:
let item;
if (item = arr.find(v => v.id ===2)) {
    console.log(item); 
}

Тем не менее, я бы не рекомендовал его - присвоение переменных внутри условного кода является запахом кода. Я предпочитаю вашу оригинальную версию, где .find делается снаружи.

Вы могли бы также сделать свою собственную функцию для чего-то вроде этого, если хотите. Определение функции не является крошечным, но теперь вы сможете назвать это кратко:

function findAnd(arr, condition, callback) {
  const item = arr.find(condition);
  if (item) callback(item);
}

const arr = [{id: 1}, {id: 2}, {id: 3}];
findAnd(arr, v => v.id === 2, item => console.log(item));
  • 4
    Это не совсем короткая рука. Это дольше, чем оригинальное решение.
  • 1
    Это не дольше; он имеет те же токены, что и оригинал (за исключением того, что он переключает let для const ); они просто устроены по-другому. Разница здесь в том, что вы можете сохранить let item; заявление, если оно может быть определено в другом месте. Это не очень большая экономия, но я думаю, что мы все цепляемся за соломинку здесь.
1

Интересно... в то время как оригинал не очень длинный, было любопытно поддразнивать. Не очень коротко, но что-то.

for (let item = arr.find(v => v.id === 2);item;) {
    console.log('Found', item); 
    break;
}
1

Если вам просто нужно использовать item внутри блока if, вам не нужны var, let или const. Но недостатком является то, что переменная будет привязана по всему миру.

const arr = [{id: 1}, {id: 2}, {id: 3}]; 

if (item = arr.find(v => v.id === 2)) {
   console.log(item);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню