首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Nodejs:如何克隆对象

Nodejs:如何克隆对象
EN

Stack Overflow用户
提问于 2011-05-22 23:53:47
回答 7查看 92.7K关注 0票数 96

如果克隆阵列,则使用cloneArr = arr.slice()

我想知道如何在nodejs中克隆对象。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-10-11 03:21:16

对于不需要压缩每一滴性能的实用程序和类,我经常作弊,只使用JSON执行深度复制:

代码语言:javascript
复制
function clone(a) {
   return JSON.parse(JSON.stringify(a));
}

这不是唯一的答案,也不是最优雅的答案;所有其他答案都应该被考虑到生产瓶颈。然而,这是一个快速而肮脏的解决方案,非常有效,并且在大多数情况下都很有用,我需要克隆一个简单的属性散列。

票数 188
EN

Stack Overflow用户

发布于 2017-06-01 14:14:16

上面的答案中都没有提到Object.assign。

代码语言:javascript
复制
let cloned = Object.assign({}, source);

如果你在ES6上,你可以使用扩展运算符:

代码语言:javascript
复制
let cloned = { ... source };

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign

票数 42
EN

Stack Overflow用户

发布于 2011-05-22 23:57:24

没有用于克隆对象的本机方法。下划线实现了_.clone,这是一个浅层克隆。

代码语言:javascript
复制
_.clone = function(obj) {
  return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
};

它要么对其进行切片,要么对其进行扩展。

这是_.extend

代码语言:javascript
复制
// extend the obj (first parameter)
_.extend = function(obj) {
  // for each other parameter
  each(slice.call(arguments, 1), function(source) {
    // loop through all properties of the other objects
    for (var prop in source) {
      // if the property is not undefined then add it to the object.
      if (source[prop] !== void 0) obj[prop] = source[prop];
    }
  });
  // return the object (first parameter)
  return obj;
};

Extend简单地遍历所有项,并创建一个包含这些项的新对象。

如果需要,您可以推出自己的朴素实现

代码语言:javascript
复制
function clone(o) {
  var ret = {};
  Object.keys(o).forEach(function (val) {
    ret[val] = o[val];
  });
  return ret;
}

有充分的理由避免深度克隆,因为闭包不能被克隆。

我个人曾问过一个关于deep cloning objects before的问题,我得出的结论是,你就是不做它。

我的建议是对浅层克隆使用underscore及其_.clone方法

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6089058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档