2

我因此创建了一个对象:

var savingArray = new Array({doctorId: "something", username: "something", password: "something", givenName: "something", familyName: "something", address: "something", zip:"something", emailAddress: "something", phoneNumber: "something", labs: "something", defaultLab: "something"});

现在我希望删除对象的每个值...我想以 saveArray 结束,这样:

savingArray == ({doctorId: "", username: "", password: "", givenName: "", familyName: "", address: "", zip:"", emailAddress: "", phoneNumber: "", labs: {}, defaultLab: ""});

所以我想要的只是将所有值更改为“”动态..

saveArray 从来没有相同的对象,所以不能这样做:

savingArray[0].doctorId = "";
4

6 回答 6

6
for(var i = 0; i < savingArray.length; i++) {
    var obj = savingArray[i];
    for(var key in obj) {
        obj[key] = '';
    }
}

或者,由于您使用的是 jQuery,您还可以使用它的$.each()函数进行迭代:

$.each(savingArray, function(i, obj) {
    $.each(obj, function(key, value) {
        obj[key] = '';
    });
});

如果修改了某些Object.prototype内容(例如,向其中添加了方法——通常不应该做的事情),您需要添加一个if(obj.hasOwnProperty(key))检查,并且只有在检查成功时才设置该值。

于 2012-06-01T08:20:29.607 回答
3
savingArray.forEach( function( el ) {
    Object.keys( el ).forEach( function( key ) {
        el[ key ] = '';
    });
});

forEach使用和的自解释代码Object.keys。这当然不适用于 IE6/7/8。

于 2012-06-01T08:26:02.083 回答
1

是你要找的吗?

for (var i = 0; i < savingArray.length; i++) {
    for (var key in savingArray[i]) {
        if (savingArray[i].hasOwnProperty(key))
            savingArray[i][key] = "";
    }
}

演示:http: //jsfiddle.net/NfBqn/

于 2012-06-01T08:20:25.240 回答
1
$.each(savingArray, function(index, obj) {
  $.each(obj, function(k, val) {
     obj[k] = "";
  });
});

演示

于 2012-06-01T08:24:36.817 回答
1

JavaScript 对象的属性可以被视为键值对,并且可以迭代对象,因此您需要做的是首先迭代数组中的对象

for(var i = 0;i < savingArray.length; i++)  { ... }

然后遍历每个对象的属性。但是,您还想测试属性和对象之间的关系。把它们放在一起,你最终会得到这样的代码:

var i,prop,current;
//iterate over the objects in the array
for(i = 0;i<savingArray.length);i++){
  current = savingArray[i];
  //iterate over all the properties of the object
  for(prop in current){
     //test the relationship of the property and the object
     if(current.hasOwnProperty(prop)){
        //assign the empty string to the property
        current[prop] = "";
     } 
  }
}

或在 jQuery 版本中

$.each(savingArray, function(i, obj) {
    $.each(obj, function(key) {
        if(obj.hasOwnProperty(key)){
           obj[key] = '';
        }
    });
});

我希望前者比 jQuery 性能更高,但发现 jQuery 更容易阅读,因为它更简洁

于 2012-06-01T08:25:08.927 回答
1

当您使用 jQuery 时,也可以使用它来循环数组和对象:

$.each(savingArray, function(i, item){
  $.each(item, function(key){
    item[key] = "";
  });
});
于 2012-06-01T08:26:06.373 回答