删除对象属性,有多种方法,最常用是delete

  1. var data = {key:value};
  2. delete data.key;

不过,这方法速度很慢,如果是在循环体中,会损失很大属性。另有一种速度快很多的方法:

  1. data.key = undefined;

当然,在es6中有专用操作对象的方法;

  1. Reflect.deleteProperty(data, key);

注意:在vue中,删除属性后,要更新视图的话,需要执行:

this.$forceUpdate(); //更新视图绑定

不过,上述方法删除对象中的数据并彻底,仍会保留空间,length数量依然不变。查资料可知:它只是将该值置为 undefined,而不会影响数组长度,即将其变为稀疏数组。
要彻底删除,需要使用splice() 方法:

var test = [{ "a": "1", "b": "2" }, { "a": "3", "b": "4" }, { "a": "5", "b": "6" }];
test.length   //输出为 3
test.splice(1, 1);
test.length   //输出为 2

这在开发中经常要使用,需要熟悉。


附录:
其它操作对象的方法:

判断对象属性是否存在

Reflect.has可以用来判断对象属性是否存在,比如在递归中使用:

            getnext(num) {
                var k = 'k' + num;
                if (!Reflect.has(this.form.zd, k)) {
                    return k; //如果不存在该字段,则返回
                }
                var num = num + 1;
                return this.getnext(num);
            },

计算对象属性数量

Object.getOwnPropertyNames(data.key).length

添加一个属性

Reflect.set(data, 'key', 'value');

摘录:

静态方法

Reflect.apply(target, thisArgument, argumentsList)
对一个函数进行调用操作,同时可以传入一个数组作为调用参数。和 Function.prototype.apply() 功能类似。
Reflect.construct(target, argumentsList[, newTarget])
对构造函数进行 new操作,相当于执行 new target(…args)。
Reflect.defineProperty(target, propertyKey, attributes)
Object.defineProperty() 类似。如果设置成功就会返回 true
Reflect.deleteProperty(target, propertyKey)
作为函数的delete操作符,相当于执行 delete target[name]。
Reflect.get(target, propertyKey[, receiver])
获取对象身上某个属性的值,类似于 target[name]。
Reflect.getOwnPropertyDescriptor(target, propertyKey)
类似于 Object.getOwnPropertyDescriptor()。如果对象中存在该属性,则返回对应的属性描述符, 否则返回 undefined.
Reflect.getPrototypeOf(target)
类似于 Object.getPrototypeOf()
Reflect.has(target, propertyKey)
判断一个对象是否存在某个属性,和 in运算符 的功能完全相同。
Reflect.isExtensible(target)
类似于 Object.isExtensible().
Reflect.ownKeys(target)
返回一个包含所有自身属性(不包含继承属性)的数组。(类似于 Object.keys(), 但不会受enumerable影响).
Reflect.preventExtensions(target)
类似于 Object.preventExtensions()。返回一个Boolean
Reflect.set(target, propertyKey, value[, receiver])
将值分配给属性的函数。返回一个Boolean,如果更新成功,则返回true。
Reflect.setPrototypeOf(target, prototype)
设置对象原型的函数. 返回一个 Boolean, 如果更新成功,则返回true。
image.png