简体   繁体   English

Javascript 复制 object 中的属性

[英]Javascript copy properties inside an object

I have an object as below;我有一个 object 如下;

record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
}

Now I want all these properties to be copied to a "row" attribute inside "record".现在我希望将所有这些属性复制到“记录”内的“行”属性中。 So, it should look like;所以,它应该看起来像;

record = {
    row: {
        prop1: 'X',
        prop2: 'Y',
        prop3: 'Z'
    }
}

While I can get that using虽然我可以使用

record.row = record;

What I want is我想要的是

  1. the properties prop1/prop2/prop3 to be removed as direct child of "record" after copying them inside record.row属性 prop1/prop2/prop3 在将它们复制到 record.row 后作为“记录”的直接子级删除
  2. The above statement also ends up repeating the properties inside the row (sort of circular thing) which I want to avoid上面的语句也最终重复了我想避免的行内的属性(某种圆形的东西)

How can I achieve this satisfying both the conditions?我怎样才能同时满足这两个条件? PS: "propX" are all simple string values, I am fine with a deep/shallow copy PS:“propX”都是简单的字符串值,我可以用深/浅拷贝

what about this那这个呢

record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
}
record = {row:{...record}}

or或者

record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
}
record = Object.assign({},{row:record})

You can do:你可以做:

let record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
}

record = { ...record, row: record }

For older version of node, you can do this instead:对于旧版本的节点,您可以这样做:

var record = {
  prop1: 'X',
  prop2: 'Y',
  prop3: 'Z'
};


let newRecord = {}
Object.assign(newRecord, {
  row: record
});

// console.log(newRecord)

Does this solve it?这能解决吗? I assume you want the original variable to be overwritten.我假设您希望覆盖原始变量。

record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
}

var tempRecord = {record:record}

record = tempRecord

Solution-1解决方案-1

var record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
}
let newRecord = {row:{}}
Object.keys(record).forEach(key=> newRecord.row[key] = record[key]);

Solution-2解决方案-2

  var record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
  }
  let newRecord = {};

  for (let[key,value] of Object.entries(record)) {
    if (!newRecord['row']) {
      newRecord = {
        row: {}
      };
    }
    newRecord["row"][key] = value;
  }

Solution-3:解决方案3:

var record = {
    prop1: 'X',
    prop2: 'Y',
    prop3: 'Z'
}

record = {row:{...record}}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM