2017-10-20 87 views
1

今天我在这里,因为我无法自己找出问题。我有以下对象:重置对象键值

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

现在我想这样做,可以将所有的每个关键字保持对0的值,因此,下一次我调用这个对象,所有的值被重置为;

什么,我都试过,但它不工作如下:

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

所有的钥匙,我只希望“类型”以保持其价值,而剩下的应该重置为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 
} 

回答

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);

+0

我对所有事情都很洞察,我错过了这个错误。谢谢 – user3477993

+0

不客气! – nashcheez

1

你可以简单的循环中的对象并清除所有类似的特性:

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

伟大的建议 – user3477993

1

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

this[i] = 0而不是i = 0

+0

谢谢。我错过了这个错误 – user3477993

1

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

试试这个:

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

简单而有效。谢谢 – user3477993

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); 
+0

不错。谢谢你, – user3477993