如何复制或复制数组数组
Posted
技术标签:
【中文标题】如何复制或复制数组数组【英文标题】:How to copy or duplicate an array of arrays 【发布时间】:2012-03-13 01:13:10 【问题描述】:我正在尝试创建一个复制数组数组的函数。我试过 blah.slice(0);但它只复制参考。我需要制作一个保持原件完好无损的副本。
我在http://my.opera.com/GreyWyvern/blog/show.dml/1725165找到了这个原型方法
Object.prototype.clone = function()
var newObj = (this instanceof Array) ? [] : ;
for (i in this)
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object")
newObj[i] = this[i].clone();
else newObj[i] = this[i]
return newObj;
;
它可以工作,但是弄乱了我正在使用的一个 jQuery 插件——所以我需要将它变成一个函数……递归并不是我最擅长的。
您的帮助将不胜感激!
干杯,
【问题讨论】:
请务必使用var
声明“i”!此外,使用 for ... in
循环遍历数组也是有风险的——使用数字索引更安全。
见:***.com/questions/565430/…
【参考方案1】:
function clone (existingArray)
var newObj = (existingArray instanceof Array) ? [] : ;
for (i in existingArray)
if (i == 'clone') continue;
if (existingArray[i] && typeof existingArray[i] == "object")
newObj[i] = clone(existingArray[i]);
else
newObj[i] = existingArray[i]
return newObj;
【讨论】:
太棒了。正是我需要的!【参考方案2】:例如:
clone = function(obj)
if (!obj || typeof obj != "object")
return obj;
var isAry = Object.prototype.toString.call(obj).toLowerCase() == '[object array]';
var o = isAry ? [] : ;
for (var p in obj)
o[p] = clone(obj[p]);
return o;
根据 cmets 改进
【讨论】:
将因null
而中断(null.pop 将抛出)。第一次检查应该类似于if (typeof obj != "object" || !obj)
。
此外,对继承属性的处理存在问题 - javascript 中的“克隆”存在语义问题。以上是关于如何复制或复制数组数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 C++ 中将数组 char 复制到字符串或 int* (void *) 中? [关闭]
如何“连接”或“组合”或“加入”一系列“二进制”序列化字节数组? [复制]
如何根据数组索引从数组复制到 Vector256,反之亦然?
如何在不使用 JSON.stringify 或 JSON.parse 的情况下在 javascript 中克隆数组? [复制]