Как вернуть определенный ответ при переборе массива?
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');