获取浅层副本对象数据的最快方法是什么?

时间:2015-01-03 02:20:17

标签: javascript

仅限香草JS

也就是说,它的输出应该是一个只包含数据的对象,并忽略原始的方法/原型。继承自默认Object的复杂数据结构(如Array)可以以浅层方式复制,作为引用。我现在的方式是:

function shallowCopyObjectData(obj) {
  output = {};
  for (var i in item) {
    output[i] = obj[i];
  }
  return output;
};

我见过的另一种方式是:

function shallowCopyObjectData(obj) {
  return JSON.parse(JSON.stringify(obj));
};

最有效的方法是什么?

我已经制作了一个运行jsPerf来比较速度。如果您想出一个解决方案,请随意分叉并添加:http://jsperf.com/shallow-object-data-copy

修改 @Barmar:我知道一个similar question has already been posted,但是它询问了克隆对象的最快方法,这暗示了一个保留构造函数,原型等的深层拷贝。这个问题询问了复制数据的最快方法在顶层

3 个答案:

答案 0 :(得分:1)

Object.assign()方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。 如果目标对象中的属性具有相同的键,则它们将被源中的属性覆盖。

var obj = { a: 1, b: 2, };
var new_obj = Object.assign({}, obj);
console.log(new_obj); //{ a: 1, b: 2, }
console.log(new_obj == obj); //false

答案 1 :(得分:-1)

我认为您询问深度克隆(复制)。浅拷贝就像将原始对象分配给新变量一样简单。

var originalObj = { someKey: 1 };
var copyObj = originalObj; 

答案 2 :(得分:-1)

您可以使用Object.assign快速克隆对象。语法为Object. assign(originObject, extendObject)。它将返回具有originObject和extendObject属性的对象。

例如,我在这里有代码:

var originObject = {value: 1};
var extendObject = {key: 2};
var shadowObject = {};

// Now I want clone originObject to shadow object
shadowObject = Object. assign(originObject, {});
// shadowObject = {value: 1}

// If you want clone originObject and extendObject to one object
shadowObject = Object. assign(originObject, shadowObject);
// shadowObject = {value: 1, key: 2}