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