这是我需要做的。我有一个对象
{"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删除可以做什么,但我自己不认为它一直带我去那里。我应该提一下
对象进行字符串化,根据需要清除字符串,然后对其进行去串化,然后最终放入新的MainA组属性当然是可能的,但我想知道是否还有其他技术,可能是依赖于jQuery?,会让我更快。
答案 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
本身被修改,它也作为函数的结果返回。