我正在使用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 };
});
有没有更好的方法可以做到这一点,因为我只更改了一个对象元素?
答案 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;
});
}