删除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属性当然是可能的,但我想知道是否还有另一种技术,可能是依赖于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'}
。这样你就不必再迭代了,但你必须维护映射。谢谢。事实上,我坚持简单迭代,但我喜欢你的泛型函数,这就是我接受你答案的原因。谢谢。我一直努力编写泛型函数,这使重用更容易。谢谢。事实上,我坚持简单迭代,但我我喜欢你的泛型函数,这就是为什么我接受你的答案。谢谢。我一直努力写泛型函数,这使重用更容易。