jQuery映射选中的对象

时间:2016-03-31 03:06:43

标签: javascript jquery

我正在使用JavaScript,你能帮我吗? 这是我的问题。 我有这个对象:

var MyObj= [{ a: 0, b: "Zero", c: "x", d: "!" }, { a: 1, b: "One", c: "y", d: "@" }]

我想将所选对象的元素(“a” - >“id”)更改为:

var NewObj= [{ id: 0, b: "Zero", c: "x", d: "!" }, { id: 1, b: "One", c: "y", d: "@" }]

我尝试使用像这样的$ .map()方法

NewObj= $.map(MyObj, function (obj) {
        return { id: obj.a, b: obj.b, c: obj.c, d:obj.d };
    });

有没有更好的方法可以做到这一点,因为我只更改了一个对象元素?

3 个答案:

答案 0 :(得分:2)

在您的示例中,MyObj是一个对象数组

var object = {}
var array = []
var arrayOfObjects = [{}, {}, {}]

在您想要的结果中,您更改了数组中每个对象之一。

使用map是一种非常恰当的方法,实际上JavaScript的数组有一个内置的map方法。

var newArrayOfObjects = arrayOfObjects.map(function (obj) {
  return {
    id: obj.a,
    b: obj.b,
    c: obj.c
  }
})

如果你有大量的密钥,这可能会有点冗长,所以你可以使用$.extend,但是你可能正在为现代浏览器编写代码,所以整个事情都可以写成:

var newArrayOfObjects = arrayOfObjects.map(obj => 
  Object.assign({}, obj, { id: obj.a })
)

更新:正如@Amadan建议的那样,如果需要,您也可以删除旧密钥

答案 1 :(得分:2)

除非您有克隆/复制/扩展功能,否则不会。一个是coming up新JavaScript,jQuery has one,编写自己的文件并不是很难。但它仍然不是在公园散步 - 你不能只重命名一个属性,你需要复制和删除:

NewObj = MyObj.map(function(obj) {
  var newobj = Object.assign({}, obj, {id: obj.a});
  delete newobj.a;
  return newobj;
});

答案 2 :(得分:2)

不需要ES6 / Object.assign,不需要jQuery:

工作小提琴https://jsbin.com/gosaqid/edit?js,console

function makeObj(obj){
  return obj.map(function(el, i) {
    el.id = i;
    delete el.a;
    return el;
  });
}