0

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

{"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 可以做什么,但就其本身而言,我认为它并没有把我带到那里。我应该提一下

  1. 有时可能一开始就没有 MainA 组属性。
  2. 如果代码按预期工作,则 MainA 组属性永远不会超过一个。

对对象进行字符串化,根据需要清除字符串,然后对其进行去字符串化,然后最后放入新的 MainA 组属性当然是可能的,但我想知道是否还有另一种技术,可能依赖于 jQuery?那里更快。

4

2 回答 2

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

或者只是添加“子”值:

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

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

于 2013-06-04T13:15:06.453 回答
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/

于 2013-06-04T13:56:15.100 回答