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了。