我建议:
function removeKeyStartsWith(obj, letter) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && prop[0] == letter){
delete obj[prop];
}
}
}
JS Fiddle演示。顺便说一句,通常使用对象字面量比构造函数更容易(并且被认为是“最佳实践”),因此以下内容值得展示(即使你喜欢new Object()
语法):
var map = {
'XKey1' : "Value1",
'XKey2' : "Value2",
'YKey3' : "Value3",
'YKey4' : "Value4",
};
JS Fiddle演示。
如果你真的想使用正则表达式(但为什么呢?),那么以下内容可以实现:
function removeKeyStartsWith(obj, letter, caseSensitive) {
var sensitive = caseSensitive === false ? 'i' : '',
reg = new RegExp('^' + letter, sensitive);
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && reg.test(prop)) {
delete obj[prop];
}
}
}
var map = new Object();
map['XKey1'] = "Value1";
map['XKey2'] = "Value2";
map['YKey3'] = "Value3";
map['YKey4'] = "Value4";
console.log(map);
removeKeyStartsWith(map, 'x', true);
console.log(map);
JS Fiddle演示。
最后(至少现在)一个扩展了Object
原型的方法,允许用户搜索以给定字符串开头、以给定字符串结尾或(通过同时使用startsWith
和endsWith
)是一个给定字符串的属性(大小写敏感或不敏感):
Object.prototype.removeIf = function (needle, opts) {
var self = this,
settings = {
'beginsWith' : true,
'endsWith' : false,
'sensitive' : true
};
opts = opts || {};
for (var p in settings) {
if (settings.hasOwnProperty(p)) {
settings[p] = typeof opts[p] == 'undefined' ? settings[p] : opts[p];
}
}
var modifiers = settings.sensitive === true ? '' : 'i',
regString = (settings.beginsWith === true ? '^' : '') + needle + (settings.endsWith === true ? '$' : ''),
reg = new RegExp(regString, modifiers);
for (var prop in self) {
if (self.hasOwnProperty(prop) && reg.test(prop)){
delete self[prop];
}
}
return self;
};
var map = {
'XKey1' : "Value1",
'XKey2' : "Value2",
'YKey3' : "Value3",
'YKey4' : "Value4",
};
console.log(map);
map.removeIf('xkey2', {
'beginsWith' : true,
'endsWith' : true,
'sensitive' : false
});
console.log(map);
JS Fiddle演示。
参考资料:
for...in
循环结合delete
关键字进行删除。 - Blazemongermap
,如果键以 "x" 开头,则删除该元素。 - user1477388XKey1
是一个具有不同值的变量吗?还是应该像map["XKey1"] = "Value1";
那样用引号括起来? - Joe Enos