$ .map对象属性为具有相似名称的新数组

时间:2013-04-20 15:39:26

标签: jquery

我有以下对象数组:

var blah = [
    { foo: 1, bar: 2 },
    { foo: 2, bar: 1 }
];

我想将属性名称从foo更改为Foobar更改为Bar。所以我试试了jQuery.map。但是,我不知道该返回什么:

var newBlah = $.map(blah, function(i, v){
    return /* ...? */;
});

期望的结果:

console.log(newBlah); //[{ Foo: 1, Bar: 2... etc

4 个答案:

答案 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.mapv, i,而jQuery.fn.mapi, 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;
}

此方法允许您不实例化新对象。如果您的对象复杂且相互关联,这可能是首选方式