删除JavaScript对象属性

时间:2013-06-04 13:12:09

标签: javascript

这是我需要做的。我有一个对象

{"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删除可以做什么,但我自己不认为它一直带我去那里。我应该提一下

  1. 有时可能首先没有出现MainA组属性。
  2. 如果代码按预期工作,则永远不会有多个MainA组属性。
  3. 对象进行字符串化,根据需要清除字符串,然后对其进行去串化,然后最终放入新的MainA组属性当然是可能的,但我想知道是否还有其他技术,可能是依赖于jQuery?,会让我更快。

2 个答案:

答案 0 :(得分:3)

您必须遍历属性,比较每个名称,然后delete属性:

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: '...'};

或只添加“sub”值:

obj.MainA.SubD = '...';

从长远来看,这会更灵活。

答案 1 :(得分:1)

这是一个通用函数:

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本身被修改,它也作为函数的结果返回。

在此处查看此行动:http://jsfiddle.net/jstoolsmith/EpSxC/