如何在不使用JSON.stringify或JSON.parse的情况下在javascript中克隆数组?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在不使用JSON.stringify或JSON.parse的情况下在javascript中克隆数组?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1816字,纯文字阅读大概需要3分钟。
内容图文
参见英文答案 > Copy array by value 33个
我有一个数组示例水果.我想将它复制为数组fruits2,而不保留引用.
如下面的示例所示,保留了引用以便修改水果.
var fruit = function (name){
this.name = name;
}
var fruits = [];
fruits.push(new fruit('apple'));
fruits.push(new fruit('banana'));
fruits.push(new fruit('orange'));
var fruits2 = fruits;
fruits2.length = 0;
console.log(fruits);
使用JSON.stringify和JSON.parse可以解决这个问题,但fruits2中的对象不再是类型的水果,而是一般类型的对象
var temp = JSON.stringify(fruits);
var fruits2 = JSON.parse(temp);
我想知道一种可以保持水果内在对象的替代方法.
解决方法:
使用slice:var fruits2 = fruits.slice();应该这样做.
你的jsFiddle,修改过
另见:MDN
**编辑.我有点懒,让我更正我的答案以弥补这一点.
对于一个只是值的数组切片是完美的.对于对象或数组的数组或值/对象/数组的混合,要克隆的数组的Array和Object元素也需要克隆.否则它们将是对原始数组或对象的引用(因此:不是副本),并且一个[数组或对象的这些引用]的更改将反映在包含对它的引用的所有“克隆”中.
如果您的朋友,要克隆阵列数组/对象/混合值Array.map.有几种方法可以考虑:
>使用旧数据创建新实例
var fruits1 = fruits.map(function(v){return new Fruit(v.name);});
>使用JSON
var fruits2 = fruits.map(function(v){return JSON.parse(JSON.stringify(v));});
>创建并使用一些克隆方法
var fruits3 = fruits.map(function(v){return cloneObj(v);});
在案例3中,克隆方法可能如下所示:
function cloneObj(obj) {
function clone(o, curr) {
for (var l in o){
if (o[l] instanceof Object) {
curr[l] = cloneObj(o[l]);
} else {
curr[l] = o[l];
}
}
return curr;
}
return obj instanceof Array
? obj.slice().map( function (v) { return cloneObj(v); } )
: obj instanceof Object
? clone(obj, {})
: obj;
}
使用此cloneObj方法,Array.map已过时.
你也可以使用var fruitsx = cloneObj(fruits);
上面链接中的jsFiddle被修改以演示这些方法.
对于Array.map,请再次参见MDN
内容总结
以上是互联网集市为您收集整理的如何在不使用JSON.stringify或JSON.parse的情况下在javascript中克隆数组?全部内容,希望文章能够帮你解决如何在不使用JSON.stringify或JSON.parse的情况下在javascript中克隆数组?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。