我今天在这里,因为我自己无法解决问题。我有以下对象:
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
}
答案 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);