【问题标题】:How to remove a value from array? javascript如何从数组中删除一个值? javascript
【发布时间】:2023-03-31 09:47:02
【问题描述】:

我这样创建了一个对象:

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: ""});

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

savingArray 从来没有同一个对象,所以 a 不能这样做:

savingArray[0].doctorId = "";

【问题讨论】:

  • Fy,使用[...] 而不是new Array(...) 创建数组更简洁。在您的第二个代码块中,() 应该是 []
  • 当所有其他属性都是空字符串时,为什么labs 属性会是一个空对象?
  • 绝对肯定:您确实意识到您正在创建一个只有一个条目的数组,对吧?并且那个 entry 是一个带有各种键的对象?你在某个时候在数组中有其他条目吗?

标签: javascript jquery arrays json


【解决方案1】:
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)) 检查并仅在检查成功时设置值。

【讨论】:

  • FWIW $.each() 不使用 .hasOwnProperty()
  • 是的。但无论如何,这里很可能没有必要。
  • 是的 - 我不再在我自己的代码中使用它。人们仍然使用它,因为 Crockford 是这么说的,但除非你的代码与 Object.prototype 混为一谈,否则它是不必要的。
【解决方案2】:
savingArray.forEach( function( el ) {
    Object.keys( el ).forEach( function( key ) {
        el[ key ] = '';
    });
});

使用forEachObject.keys 的自我解释代码。当然,这在 IE6/7/8 中不起作用。

【讨论】:

  • 哎呀!如果您假设 ES5,您应该使用 .forEach(),而不是 .map() - 后者是在您返回一个新数组时使用。
  • am 返回一个新数组 :) 这不是必需的,但两种方式都可以。
  • @Alnitak 我为你添加了一个 forEach 方式 :-)
  • @Alnitak 呃,我把它与“替换当前数组”混淆了,只用 foreach 编辑:)
  • 您的第一个代码不起作用 - 它确实修改了元素,但它返回了一个格式错误的新数组。
【解决方案3】:

是你要找的吗?

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/

【讨论】:

    【解决方案4】:

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

    $.each(savingArray, function(i, item){
      $.each(item, function(key){
        item[key] = "";
      });
    });
    

    【讨论】:

      【解决方案5】:
      $.each(savingArray, function(index, obj) {
        $.each(obj, function(k, val) {
           obj[k] = "";
        });
      });
      

      DEMO

      【讨论】:

      • 因为你已经有了obj,我会使用obj[k] = ""; 而不是savingArray[index][k] = "";。保存不必要的查找。
      【解决方案6】:

      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 更容易阅读,因为它更简洁

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 2015-12-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多