我有以下对象数组:
var blah = [
{ foo: 1, bar: 2 },
{ foo: 2, bar: 1 }
];
我想将属性名称从foo
更改为Foo
和bar
更改为Bar
。所以我试试了jQuery.map
。但是,我不知道该返回什么:
var newBlah = $.map(blah, function(i, v){
return /* ...? */;
});
期望的结果:
console.log(newBlah); //[{ Foo: 1, Bar: 2... etc
答案 0 :(得分:3)
使用旧对象的值创建一个新对象:
var newBlah = $.map(blah, function(v, i){
return { Foo: v.foo, Bar: v.bar };
});
注意:回调中的参数是项目,然后是索引。
答案 1 :(得分:2)
var newBlah = $.map(blah, function(i, v){
return {
Foo : this.foo,
Bar : this.bar
}
});
如果你想让它变得通用,请告诉我。
答案 2 :(得分:2)
假设名称已知,则使用对象文字会更容易:
return { Foo: v.foo, Bar: v.bar };
如果你想大写任何一个对象的属性名称,那就更多了:
var result = {};
for(var x in v) {
if(v.hasOwnProperty(x)) {
result[x.charAt(0).toUpperCase() + x.substring(1)] = v[x];
}
}
return result;
(虽然这对getter和setter等不起作用。)
P.S。你的论点是错误的; jQuery.map
为v, i
,而jQuery.fn.map
为i, v
。
答案 3 :(得分:0)
以下方法也可行。它复制属性值,然后删除不必要的属性。
var blah = [{foo:1, bar:2}, {foo:2, bar:3}];
for (var i = 0; i < blah.length; i++){
blah[i].Foo = blah[i].foo;
delete blah[i].foo;
blah[i].Bar = blah[i].bar;
delete blah[i].bar;
}
此方法允许您不实例化新对象。如果您的对象复杂且相互关联,这可能是首选方式