【问题标题】:How to clone an item of objects in array?如何克隆数组中的一项对象?
【发布时间】:2015-11-30 11:15:34
【问题描述】:

我有一个如下所示的数组 -

var x = [{
    name: "Mr.X", 
    age: 22
},{
    name: "Mr.Y", 
    age: 26
},{
    name: "Mr.Z", 
    age: 24
},];

我想复制第二个项目并将其作为第一个元素。为避免混淆,我希望得到的数组如下所示 -

var x = [{
    name: "Mr.YD", 
    age: 19
},{
    name: "Mr.X", 
    age: 22
},{
    name: "Mr.Y", 
    age: 26
},{
    name: "Mr.Z", 
    age: 24
},];

我已经尝试和得到的 - 我提取了第二个项目,并更改了 nameage 属性。但它也在改变第二项。我知道这是因为我们正在更改参考。但我不知道如何提取/复制项目并仅更改其值。

【问题讨论】:

  • 是否有特定原因需要克隆数组中的现有对象而不是仅仅创建一个新对象?
  • 参考这个:jsfiddle.net/e7kLb9f8
  • 我没有听懂你的问题。但结果数组可能是“y”而不是“x”。
  • @RayonDabre - 只有一件事 - 结果也应该是一个对象数组,就像输入一样。
  • JSON.stringify 仅用于演示结果..您可以将其删除!

标签: javascript jquery arrays object reference


【解决方案1】:

如果您正在寻找对象的克隆 有多种方法

jQuery 扩展:

// Shallow copy
  var newObject = jQuery.extend({}, oldObject);

  // Deep copy
  var newObject = jQuery.extend(true, {}, oldObject);

JSON 字符串化

var newObject =  JSON.parse(JSON.stringify(oldObject))

或者: 通过递归遍历对象 props 来编写克隆方法

然后使用标准数组 API 追加到数组

【讨论】:

    【解决方案2】:
    var x = [{
        name: "Mr.X", 
        age: 22
    },{
        name: "Mr.Y", 
        age: 26
    },{
        name: "Mr.Z", 
        age: 24
    },];
    console.log(x);
    var y = JSON.parse(JSON.stringify(x));
    y.unshift({
        name: "Mr.XD", 
        age: 19
    });
    console.log(y);
    
    1. Unshift 追加到数组顶部
    2. 在数组末尾推送追加

    【讨论】:

    • 虽然它通常可以工作,但我绝不建议使用 JSON 来克隆对象。
    猜你喜欢
    • 2018-05-26
    • 2010-10-10
    • 2011-09-19
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多