0

我有以下对象数组:

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

我想将属性名称从footoFoobarto更改为Bar。所以我jQuery.map试了一下。但是,我不确定要返回什么:

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

期望的结果:

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

4 回答 4

3

您使用旧对象的值创建一个新对象:

var newBlah = $.map(blah, function(v, i){
  return { Foo: v.foo, Bar: v.bar };
});

注意:回调中的参数是项目,然后是索引。

于 2013-04-20T15:41:25.353 回答
2
var newBlah = $.map(blah, function(i, v){
    return {
        Foo : this.foo,
        Bar : this.bar
    }
});

如果你想让它通用,请告诉我。

于 2013-04-20T15:41:22.250 回答
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 等。)

PS您的论点顺序错误;jQuery.mapv, ijQuery.fn.map而是i, v

于 2013-04-20T15:43:10.393 回答
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;
}

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

于 2013-04-20T15:47:59.083 回答