Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery映射选定对象_Javascript_Jquery - Fatal编程技术网

Javascript jQuery映射选定对象

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: "@" }] 我尝试像这样使用

我在用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 };
    });

由于我只更改了对象的一个元素,有没有更好的方法来执行此操作?

在您的示例中,
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;
  });
}