#javascript #arrays #express #object
#javascript #массивы #выразить #объект
Вопрос:
Я пишу конечную точку для удаления записи из фиктивной базы данных. Фиктивная база данных прямо сейчас записывается как массив объектов (затем она будет изменена на класс, а затем на реальную базу данных).
У меня есть dbHelpers.js
файл:
module.exports = {
createId(data) {
// ...
},
findById(data, recordId) {
// ...
},
deleteById(data, recordId) {
data.splice(data.findIndex(item => item.id === recordId), 1)
return data;
}
};
И я вызываю его в controllers/envelope.js
exports.deleteEnvelope = async (req, res) => {
try {
const { id } = req.params;
const envelopes = await dbEnvelopes;
const envelope = findById(envelopes, id);
if (!envelope) {
return res.status(404).send({
message: 'Envelope Not Found',
});
}
const updatedEnvelopes = deleteById(envelopes, id);
return res.status(200).send(updatedEnvelopes);
} catch (err) {
res.status(500).send(err)
}
};
Однако по какой-то причине моя findIndex
функция не работает и всегда возвращается -1
. Что не так с функцией?
Ниже приведена фиктивная база данных в config/db.js
:
const envelopes = [
{
"id": 1,
"title": "Rent",
"budget": 1000
},
{
id: 2,
"title": "Groceries",
"budget": 300
},
{
id: 3,
"title": "Entertainment",
"budget": 400
}
]
module.exports = envelopes;
Комментарии:
1. Можете ли вы привести пример
data
?2. Также
recordId
3. @evolutionxbox, обновлено с помощью фиктивной базы данных.
4. Похоже, что использование
==
вместо===
исправило проблему.5. @user7496931 тогда
recordId
это строка, а не число. Следовательно, почему я попросил об этом…
Ответ №1:
Я думаю, вы можете использовать array.filter для удаления объекта в массиве путем сопоставления идентификатора.
deleteById(data, recordId) {
return data.filter(item => item.id !== recordId)
}