Как преобразовать поле объекта в массиве объектов
Всем привет! Есть следующая структура:
const myArr = [
{ id: 0,
array: ["example"]
},
{ id: 1,
array: ["example", "test"]
},
]
Из массива объектов нужно выбрать те, у которых в array есть поле "test". Далее нужно поменять "test" на "example2". В итоге должно получиться:
[
{ id: 1,
array: ["example", "example2"]
},
]
Написала преобразователь:
const replacer = (arr: [] | undefined, text: string, newText: string) =>
arr?.map(item => item === text ? newText : item);
const answer = myArr
.map((item) => replacer(item.array, 'test', 'example2'))
.filter((item) => item.includes('examples2'));
Ожидаемо, в answer после .map выводится массив с измененными array, и фильтр уже не срабатывает. Не понимаю, как исправить. Заранее большое спасибо!
Ответы (2 шт):
Автор решения: Alexander Lonberg
→ Ссылка
Сразу применить фильтр с одновременной подменой "test"
const myArr = [
{ id: 0, array: ["example"] },
{ id: 1, array: ["example", "test"] }
]
const res = myArr.filter(({ array }) => {
const i = array.indexOf('test')
return i === -1 ? false : ((array[i] = 'example2'), true)
})
console.log(res)
Автор решения: Lev Shportak
→ Ссылка
Все должно хорошо работать, исправьте опечатку, иначе не будет совпадений
const answer = myArr
.map((item) => replacer(item.array, 'test', 'example2'))
.filter((item) => item.includes('example2'))// ошибка'examples2'