重置对象键值

时间:2017-10-20 13:57:58

标签: javascript

我今天在这里,因为我自己无法解决问题。我有以下对象:

var obj = {
    "type": "name",
    "param1": 10,
    "param2": "text",
    "param3": "more_text",
    "param4": 20
}

现在我要做的是将每个键保存的所有值重置为0,以便下次调用此对象时,所有值都重置为 0 ;

我尝试了但是它不起作用如下:

Object.prototype.reset = function(){
  for(var i in this){
    if(typeof this[i] != 'function'){
        if(i == 'type'){
            i = this[i];
     }
     else{
            i = 0;
     }
    }
  }
}

在所有键中,我只希望'type'保持其值,而其余键应重置为0;

注意:该行

if(typeof this[i] != 'function'){

是因为某些原因,this[i]返回方法的源代码,我想避免进入。如果有任何解决方案,那会很好,但我没有设法解决这个问题。

最终结果应该类似于:

var obj = {
    "type": "name",
    "param1": 10,
    "param2": "text",
    "param3": "more_text",
    "param4": 20
}

obj.reset()

var obj = {
    "type": "name",
    "param1": 0,
    "param2": 0,
    "param3": 0,
    "param4": 0
}

5 个答案:

答案 0 :(得分:1)

您只需循环访问对象并清除所有属性,如下所示:

for(var key in Object.keys(obj)) { 
   if(typeof key !== 'function') {
     obj[key] = 0;
   }
}

答案 1 :(得分:1)

您不会更改原始对象,只会更改参考。你可以这样做:

this[i] = 0代替i = 0

答案 2 :(得分:1)

Object.keys返回一个对象键的数组,比使用for in循环更合适。

试试这个:

Object.prototype.reset = function(){
    Object.keys(this).forEach(e => this[e] = 0);
};

答案 3 :(得分:1)

以下是您可能感兴趣的示例代码

var obj1 = {
    "type": "name",
    "param1": 10,
    "param2": "text",
    "param3": "more_text",
    "param4": 20
}

obj1.reset = function(){
    for(ele in this){
        if(ele!='type'){
          this[ele]="0";
        }
    }
}

console.log(obj1);
obj1.reset();
console.log(obj1);

答案 4 :(得分:1)

您应该引用对象值this[i]而不是属性i

您的代码应该是:



var obj = {
  "type": "name",
  "param1": 10,
  "param2": "text",
  "param3": "more_text",
  "param4": 20
}

Object.prototype.reset = function() {
  for (var i in this) {
    if (typeof this[i] != 'function') {
      if (i == 'type') {
        i = this[i];
      } else {
        this[i] = 0;
      }
    }
  }
}

obj.reset();

console.log(obj);