月&盾

生活的精彩要去发现,而不是等待出现

文章详情

sequelizejs删除对象属性

js中有个delete操作符可以删除对象的属性,比如下面代码:

//objtest对象有个prop属性

var objtest = {

  prop: 'delete me'

};

//或者这么声明的对象

var objtest = new Array();

objtest['prop'] = 'delete me';

//删除属性'prop':

delete objtest.prop;

//或者

delete objtest['prop'];

//还可以删除任意变量

var numb = 17;

delete numb;

但是在nodejs项目中使用了sequelizejs来读取数据,如果也有想删除的属性,直接使用delete是删不掉的,比如有这样的数据结构:

var user = {
    name:"鸣人",
    age: 16,
    gender: "男",
    friends: [
        {
            name:"小樱",
            age:16,
            gender:"女",
            friends:[
                {
                    name:"井野",
                    age:16,
                    gender:"女"
                }
            ]
        },
        {
            name:"佐助",
            age:16,
            gender:"男"
        }
    ]
}

鸣人有小樱和佐助两个朋友,小樱有井野一个朋友,小樱的朋友也可以当做鸣人的朋友,现在想把井野也提出来并列到鸣人的朋友列表里,这样做很容易,但是既然提出来了就不需要小樱的朋友列表了,应该删掉。但是用delete user.friends[0].friends这样的方法是删不掉的。可能的是sequelize对象的属性是放在dataValues对象下面的,不能直接删除。

据我debug观察,虽然有直接属性,但是sequelize提供了getDataValue方法来获取属性值,获取到的值应该是dataValues下面的。所以,就算即使用delete删掉了直接属性还是能获取到。

但是还是有办法的,可以这样删除

user.getDataValue("friends")[0].setDataValue("friends", undefined)

就是将属性设置为undefined,查询的时候就没有小樱的friends了。

关键字词:sequelize,delete