我有像
这样的键值对 var classes = { red: 'Red', green: 'Green' };
如何在每个键前加上特定值?可以使用jQuery.map吗?
我正在寻找的最终结果是
classes = { 'a-red': 'Red', 'a-green': 'Green' };
答案 0 :(得分:9)
给定的答案将起作用,但它们并不像使用像$ .map这样的纯功能构造那么有趣。这是一个纯粹的功能版本:
$.extend.apply(null, $.map(classes, function(v,k) { var h = {}; h["a-" + k] = v; return h }));
这有两个步骤:首先,映射对原始对象的键值对进行操作,并返回单值对象列表。其次,$.extend function将这些全部组合成一个对象; .apply method用于将参数作为数组传递给函数。
不幸的是,缺少一个很好的方法来制作具有可变键名的对象文字,这使得这种丑陋,并且它可能效率不高,但它是一个漂亮的单行内容!
答案 1 :(得分:5)
这样的事情会起作用:
function prependObj(obj, prefix) {
var result = {};
for(var i in obj) if(obj.hasOwnProperty(i)) result[prefix+i] = obj[i];
return result;
}
然后你会这样称呼它:
classes = prependObj(classes, "a-");
You can test it here。这不修改原始对象,并且没有任何jQuery依赖项,因此您可以使用或不使用它。
答案 2 :(得分:3)
如果您想使用jQuery来处理循环,可以使用$.each()
。
您无法真正修改现有密钥,但可以使用具有新密钥和旧值的新集替换密钥/值对,并删除旧集。
var classes = { red: 'Red', green: 'Green' };
var newClasses = {};
$.each( classes, function( key,val ) {
newClasses["a-" + key] = val;
});
或使用常规for
循环:
var classes = { red: 'Red', green: 'Green' };
var newClasses = {};
for( var name in classes ) {
if( classes.hasOwnProperty( name ) )
newClasses["a-" + key] = classes[name];
});
var classes = { red: 'Red', green: 'Green' };
$.each( classes, function( key,val ) {
classes["a-" + key] = val;
delete classes[key];
});
编辑:如果您想保留原文,或者某些浏览器存在无限循环问题(我正在测试...),请执行此操作:
答案 3 :(得分:0)
不要忘记javascript有闭包:
var classes = { red: 'Red', green: 'Green' };
var prefixedClasses = {}
$.map(classes, function(v, k) {
prefixedClasses['a-' + k] = v;
});
应该这样做。