Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除JavaScript对象属性,如_Javascript - Fatal编程技术网

删除JavaScript对象属性,如

删除JavaScript对象属性,如,javascript,Javascript,这是我需要做的。我有一个物体 {"MainASubB":"AB","MainBSubC":"BC"...} 每隔一段时间,我需要取出所有启动MainA的属性,然后再放入启动MainA的新属性。在上面的示例中,对象变换是 {"MainASubB":"AB","MainBSubC":"BC"...} => {"MainBSubC":"BC"...} => //MainASubB has now been taken out {"MainASubD":"AB","MainBSubC":"

这是我需要做的。我有一个物体

{"MainASubB":"AB","MainBSubC":"BC"...}
每隔一段时间,我需要取出所有启动MainA的属性,然后再放入启动MainA的新属性。在上面的示例中,对象变换是

{"MainASubB":"AB","MainBSubC":"BC"...} =>
{"MainBSubC":"BC"...} => //MainASubB has now been taken out
{"MainASubD":"AB","MainBSubC":"BC"...};  A new MainA group attribute, MainASubD has now been added.
我知道Javascript delete可以做些什么,但就其本身而言,我并不认为这会让我走到这一步。我应该提一下

  • 有时可能根本不存在MainA group属性
  • 如果代码按预期工作,则不能有多个MainA组属性

  • 对对象进行字符串化,根据需要清除字符串,然后对其进行反字符串化,最后放入新的MainA group属性当然是可能的,但我想知道是否还有另一种技术,可能是依赖于jQuery?的技术,可以让我更快地到达目的地。

    您必须迭代属性,比较每个名称,然后删除属性:

    for (var prop in obj) {
        if (prop.indexOf('MainA') === 0) { // property name starts with 'MainA'
            delete obj[prop];
            break; // since there can be only one
        }
    }
    

    不过,我不会使用这种“分层”属性名称。为什么不使用嵌套对象,只覆盖您认为合适的值呢

    例如:

    var obj = {
        MainA: {
           SubA: '...'
        },
        MainB: {
           SubA: '...'
        }
    };
    
    然后就是:

    obj.MainA = {SubD: '...'};
    
    或者只需添加“子”值:


    从长远来看,这将更加灵活。

    您必须迭代属性,比较每个名称,然后
    删除属性:

    for (var prop in obj) {
        if (prop.indexOf('MainA') === 0) { // property name starts with 'MainA'
            delete obj[prop];
            break; // since there can be only one
        }
    }
    

    不过,我不会使用这种“分层”属性名称。为什么不使用嵌套对象,只覆盖您认为合适的值呢

    例如:

    var obj = {
        MainA: {
           SubA: '...'
        },
        MainB: {
           SubA: '...'
        }
    };
    
    然后就是:

    obj.MainA = {SubD: '...'};
    
    或者只需添加“子”值:


    从长远来看,这将更加灵活。

    这里是一个通用函数:

    function removeProperties (obj, prop) {
      Object.keys (obj).forEach (
        function (p) {
          if (typeof prop === 'string' ? p.indexOf (prop) == 0 : prop.test (p)) 
            delete obj[p]; 
      });
      return obj;
    }
    
    参数
    obj
    是要从中删除属性的对象。参数
    prop
    可以是字符串,例如
    'MainA'
    ,在这种情况下,名称以该字符串开头的任何属性都将被删除。如果
    'prop
    是正则表达式,则名称与之匹配的任何属性都将被删除

    删除在适当的位置完成,即修改了obj本身,它也作为函数的结果返回


    请参见此处的操作:

    这里是一个通用函数:

    function removeProperties (obj, prop) {
      Object.keys (obj).forEach (
        function (p) {
          if (typeof prop === 'string' ? p.indexOf (prop) == 0 : prop.test (p)) 
            delete obj[p]; 
      });
      return obj;
    }
    
    参数
    obj
    是要从中删除属性的对象。参数
    prop
    可以是字符串,例如
    'MainA'
    ,在这种情况下,名称以该字符串开头的任何属性都将被删除。如果
    'prop
    是正则表达式,则名称与之匹配的任何属性都将被删除

    删除在适当的位置完成,即修改了obj本身,它也作为函数的结果返回


    请在此处查看操作:

    您正在查找
    删除操作人员。
    删除操作人员有什么问题?它还需要带你去哪里?也许你正在寻找
    jQuery.extend
    [也许我的问题不清楚。当我确实需要去掉MainA group属性时,我只知道可能有一个属性带有MainA#####的形式,而不知道你在寻找
    delete
    操作符。
    delete
    有什么问题吗?它还需要带你去哪里?也许你正在寻找我ng表示
    jQuery.extend
    [也许我的问题不清楚。当我确实需要去掉MainA group属性时,我只知道可能有一个属性带有MainA######的形式,但不太清楚它可能是什么。迭代当然是一种可能性——事实上这就是我目前正在做的。我发布这个问题是希望有人在这里可以建议一个更简洁的解决方案。至于分层对象属性名称,我对此几乎没有控制权。一般来说,这可能不是一个好主意,但在使用它的上下文中,它不仅是唯一的解决方案,也是完美的解决方案。@DroidOS:除了迭代属性名称之外,没有其他合理的解决方案。您可以可以保留一个包含
    前缀->属性名的额外对象
    映射,例如
    var prefix\u map={MainA:'MainASubA'}
    。这样你就不必再进行迭代了,但你必须维护映射。谢谢。迭代当然是可能的-事实上这就是我目前正在做的。我发布这个问题是希望有人能提出一个更简洁的解决方案。至于层次对象属性名称-我几乎无法控制。我一般来说,t可能不是一个好主意,但在使用它的上下文中,它不仅是唯一的解决方案,也是完美的解决方案。@DroidOS:除了迭代属性名之外,没有其他合理的解决方案。您可以保留一个额外的对象,该对象包含
    前缀->属性名
    映射,例如
    var prefix\u map={MainA:'MainASubA'}
    。这样你就不必再迭代了,但你必须维护映射。谢谢。事实上,我坚持简单迭代,但我喜欢你的泛型函数,这就是我接受你答案的原因。谢谢。我一直努力编写泛型函数,这使重用更容易。谢谢。事实上,我坚持简单迭代,但我我喜欢你的泛型函数,这就是为什么我接受你的答案。谢谢。我一直努力写泛型函数,这使重用更容易。