Помогите удалить объект внутри массива
Имеется вот такой массив объектов. Необходимо удалить отзыв у модели с названием modelName с текстом совпадающим с переменной reviewText
let reviewText = 'Text Dima'
let modelName = 'Camry'
let models = [
{
"modelName": "Camry",
"reviews": [
{
"authorName": "Dima Dima",
"text": "Text Dima"
},
{
"authorName": "Nastya",
"text": "Text Nastya"
}
]
},
{
"modelName": "RAV4",
"reviews": [
{
"authorName": "Dima Dima",
"text": "Text Text"
},
{
"authorName": "Nastya",
"text": "Text"
}
]
},
]
Пытаюсь решить таким способом:
let newNewModels = models.map(elem => {
if (elem.modelName == modelName) {
let newReviews = elem.reviews.filter(item => item.text !== text);
return newReviews
} else {
return elem
}
})
Не выходит... Буду благодарен за совет, каким путём следует мыслить для решения задачи
Ответы (2 шт):
Автор решения: vsemozhebuty
→ Ссылка
Если нужно удалить в самой структуре, не создавая новую, можно так:
let reviewText = 'Text Dima'
let modelName = 'Camry'
let models = [
{
"modelName": "Camry",
"reviews": [
{
"authorName": "Dima Dima",
"text": "Text Dima"
},
{
"authorName": "Nastya",
"text": "Text Nastya"
}
]
},
{
"modelName": "RAV4",
"reviews": [
{
"authorName": "Dima Dima",
"text": "Text Text"
},
{
"authorName": "Nastya",
"text": "Text"
}
]
},
];
const foundModel = models.find(model => model.modelName === modelName);
const foundReviewIndex = foundModel.reviews.findIndex(review => review.text === reviewText);
foundModel.reviews.splice(foundReviewIndex, 1);
console.log(models);
Автор решения: Алексей Шиманский
→ Ссылка
let models = [
{
"modelName": "Camry",
"reviews": [
{
"authorName": "Dima Dima",
"text": "Text Dima"
},
{
"authorName": "Nastya",
"text": "Text Nastya"
}
]
},
{
"modelName": "RAV4",
"reviews": [
{
"authorName": "Dima Dima",
"text": "Text Text"
},
{
"authorName": "Nastya",
"text": "Text"
}
]
},
]
let modelName = 'Camry';
let text = 'Text Dima';
newNewModels = models.map(elem => {
if (elem.modelName !== modelName)
return elem;
elem.reviews = elem.reviews.filter(item => item.text !== text);
return elem;
});
console.log(newNewModels);