Как вернуть определенный ответ при переборе массива?

const errors = [
 {id: 'BAD_REQUEST'},
 {id: 'NOT_FOUND'}
];

const error = 'OTHER';

const result = errors.find((item) => {
  if (item.id === error) {
    return {status: 'error', message: item.id}
  } else {
    return {status: 'ok', message: 'Good'}
  }
});

Возвращает текущий json из массива.
Я пытался так же через map, но он возвращает массив с undefined [undefined, undefined, {...}], forEach просто undefined возвращает.


Ответы (2 шт):

Автор решения: Aziz Umarov

Так думаю хотели?

const errors = [
 {id: 'BAD_REQUEST'},
 {id: 'NOT_FOUND'}
];

let error = 'OTHER';

let result = errors.reduce((acc, item) => item.id === error? ({status: 'error', message: item.id}): acc, 
  {status: 'ok', message: 'Good'});
  
  
console.log(result);
 
 
error = 'NOT_FOUND';

result = errors.reduce((acc, item) => item.id === error? ({status: 'error', message: item.id}): acc, 
  {status: 'ok', message: 'Good'});
  
  
console.log(result);

Дело в том что методы find filter. Возращяют элементы из массива удовлетворяющие условию поиска. А вам пригодится метод reduce который вернет результат acc после пересмотра всех значений. Следовательно вам нужно пробежаться по массиву и протащить результат через все элементы.

→ Ссылка
Автор решения: Алексей Шиманский

let errors = [
 {'BAD_REQUEST': 'message 1'},
 {'NOT_FOUND': 'message 2'}
];

let error = 'NOT_FOUND';
let index = errors.findIndex(el => el[error]);
console.log((index !== -1) ? errors[index][error] : 'Good');

//--------------------------------------------------
error = 'OTHER';
index = errors.findIndex(el => el[error]);
console.log((index !== -1) ? errors[index][error] : 'Good');

→ Ссылка