Javascript jQuery映射选定对象
我在用JavaScript,你能帮我吗 这是我的问题。 我有一个目标:Javascript jQuery映射选定对象,javascript,jquery,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: "@" }] 我尝试像这样使用
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 };
});
由于我只更改了对象的一个元素,有没有更好的方法来执行此操作?在您的示例中,
MyObj
是一个对象数组
在所需的结果中,已更改数组中每个对象的一个键
使用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所建议的,如果需要,您也可以删除旧密钥,除非您有可用的克隆/复制/扩展功能。一个是新的JavaScript,而且,编写自己的JavaScript并不难。但它仍然不是在公园里散步-你不能只是重命名一个属性,你需要复制和删除:
NewObj = MyObj.map(function(obj) {
var newobj = Object.assign({}, obj, {id: obj.a});
delete newobj.a;
return newobj;
});
不需要ES6/Object.assign,不需要jQuery: 工作小提琴:
这是破坏性的,并且将改变MyObj。您最好使用
forEach
而不是map
。请帮助我理解。。。这不是他想要的吗?要更改对象?我假设,通过他选择变量名,他想创建一个新对象(NewObj
),它不同于他的旧对象(MyObj
)。基于此,我假设了相反的情况:“我想将所选对象的元素(“a”->“id”)更改为这样:@Omarjmh:非常感谢,代码工作正常。这就是我想要的。
NewObj = MyObj.map(function(obj) {
var newobj = Object.assign({}, obj, {id: obj.a});
delete newobj.a;
return newobj;
});
function makeObj(obj){
return obj.map(function(el, i) {
el.id = i;
delete el.a;
return el;
});
}