Удаление объекта из массива с помощью свойства

#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)
}