通过属性从数组中删除对象

时间:2020-11-05 21:38:23

标签: javascript arrays express object

我正在编写一个端点,以从虚拟数据库中删除一条记录。现在,虚拟数据库被写为对象数组(然后将其更改为类,然后是实际数据库)。

我有一个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 个答案:

答案 0 :(得分:0)

我认为您可以使用array.filter通过匹配ID来删除数组中的对象。

deleteById(data, recordId) {
    return data.filter(item => item.id !== recordId)
}