在JavaScript中截断对象的最快方法

时间:2015-10-31 16:39:38

标签: javascript object

我知道我们可以截断一个数组(不确定它是最好的方法!)

var person = ["John", "Doe", 50, "blue"]
person  = [];

现在可以告诉我如何截断对象吗?

var person = {
    firstName:"John",
    lastName:"Doe",
    age:50,
    eyeColor:"blue"
};

这样的事情有用吗?

var person = {
    firstName:"",
    lastName:"",
    age:,
    eyeColor:""
};

有没有更好更快的方法呢?

2 个答案:

答案 0 :(得分:1)

您发布的内容不正确,因为您只是将新数组分配给存储前一个数组的变量 ...这样做会丢失内存引用使用上一个数组...

var persons = ['Hitmands', 'You', 'ecc...'];
persons = []; // this is a new array not the previous array whitout values.

在许多情况下,这是你需要的,但是如果你需要使用人员阵列保留内存参考......你不能!

因此,使数组为空而不丢失内存引用的正确方法是:

var persons = ['Hitmands', 'You', 'ecc...'];
persons.length = 0;

使用 Object 获取相同的内容有点困难,因为 Objects 没有任何 length (或类似)属性(或方法)。

所以,您可以执行以下操作:

  1. 构建一个知道如何让自己为空的自定义对象
  2. var Person = (function() {
      function Person(name, job, hobbies) {
        this.name = name;
        this.job = job;
        this.hobbies = this.hobbies.concat(hobbies);
      }
      
      Person.prototype.name = '';
      Person.prototype.job = '';
      Person.prototype.hobbies = [];
      
      Person.reset = function(person) {
        for(var i in person) {
          if(!person.hasOwnProperty(i)) { continue; }
          
          person[i] = Person.prototype[i];
          
        }
      };
      
      return Person;
    })();
    
    var hitmands = new Person('Hitmands', 'Frontend Developer', ['Javascript', 'Photography', 'Guitar', 'Rock']);
    
    console.log('hitmands is:', JSON.stringify(hitmands));
    Person.reset(hitmands)
    console.log('now hitmands is:', JSON.stringify(hitmands));

    希望帮助

答案 1 :(得分:1)

最快的方法是:

person = { };

此解决方案的问题是所有参数都将未定义

在某些情况下, undefined null 会有不同的含义,主要是前者表示遗漏参数,后者表示参数值已自愿设定 null ,这在某些情况下可能有意义。

此外,最佳方法还取决于您的实际代码和软件架构。举个例子,如果你在某个地方有多个对该对象的引用,那么你实际上并没有使它失效,这样你就可以肯定会遇到烦人的错误。

那就是说,可能的替代方法如下:

for(var prop in person) {
    if(person.hasOwnProperty(prop)) {
        person[prop] = null;
    }
}

这既不是唯一的,也不是最好的,但可能是一个很好的起点。