如何在不使用JSON.stringify或JSON.parse的情况下在javascript中
参见英文答案 >
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); http://jsfiddle.net/vkdqur82/ 使用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.有几种方法可以考虑: >使用旧数据创建新实例 在案例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已过时. 上面链接中的jsFiddle被修改以演示这些方法. 对于Array.map,请再次参见MDN (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |