使用lodash从对象中删除字段

时间:2018-06-01 16:12:55

标签: javascript lodash

我想仅在方法==添加时向API服务器发送数据属性,如果它= =删除,我不想发送我的数据。< / p>

我有

var body =
{
    id: 1,
    method: method,
    params: [
        {
            data: {
                "key1" : "value1",
                "key2" : "value2",
                "key3" : "value3"
            },

            url: `/url/anything`
        }
    ],
    session: session,
    verbose: 1
};

我试过

if(method == 'delete') {
    _.pick(body.params[0], ['data']);
}

我也试过

if(method == 'delete') {
    _.pick(body.params[0],'data');
}

出于某种原因,我仍然看到我仍在发送data

问题

如何继续进行调试?

我现在对任何建议持开放态度。

任何提示/建议/帮助都将非常感谢!

3 个答案:

答案 0 :(得分:1)

如果您查看lodash pick documentation,您会看到它不会更改源对象,而是从源对象属性创建一个新对象并返回新对象,如果要删除来自源对象的数据属性,您可以使用unset method from lodash从对象或一组道具中删除属性, 您也可以使用delete operator

答案 1 :(得分:1)

使用import mongoose from 'mongoose'; const Schema = mongoose.Schema; // Post comments schema const CommentSchema = new Schema({ body: { type: String }, addedBy: { type: Schema.Types.ObjectId, ref: 'User' }, }); // Main Post schema const PostSchema = new Schema({ image: { data: Buffer, contentType: String }, caption: { type: String }, comments: [CommentSchema], uploadedBy: { type: Schema.Types.ObjectId, ref: 'User' }, likedBy: [{ type: Schema.Types.ObjectId, ref: 'User' }], bookmarkedBy: [{ type: Schema.Types.ObjectId, ref: 'User' }], }, { timestamps: true, }, ); const Post = mongoose.model('Post', PostSchema); export default Post;

_.assign

答案 2 :(得分:0)

您可能需要这样做。

if(method === 'delete') {
    body.params[0].data = undefined;
}

在这种情况下,我们会通过分配data删除undefined的所有内容。