javascript - 对包含对象的数组进行切片并获取包含对象副本的数组

标签 javascript arrays javascript-objects slice

当我制作一个包含对象的数组切片时,新数组仍然具有对初始数组中对象的引用。如何制作带有对象副本的切片?

var obj1 = {name: 'object1'};
var obj2 = {name: 'object2'};
var array = [obj1, obj2];
var arraySlice = array.slice(0, 1);
arraySlice[0].name = 'object1RENAMED';
console.log(array[0].name);
console.log(arraySlice[0].name);

http://jsfiddle.net/eqgj873h/

打印:

object1RENAMED
object1RENAMED

最佳答案

在我们的例子中,您对值有相同的引用(值是对象),这就是您可以更改不同数组中的值的原因。您需要创建深度克隆/副本:

var arraySlice = JSON.parse(JSON.stringify(array.slice(0, 1)));

如果你使用 jQuery,你可以这样做

var arraySlice = $.extend(true, [], array.slice(0, 1));

演示:http://jsfiddle.net/eqgj873h/2/

关于javascript - 对包含对象的数组进行切片并获取包含对象副本的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27619849/

相关文章:

javascript - 使用 Javascript 中的 Select 值预览图像

java - JAVA 中的缓冲读取器数组

javascript - 如何将对象数组中的字段值复制到另一个数组中

javascript - 如何连接 JavaScript 字符串数组

javascript - Jquery 根据选择的值计算折扣

javascript - 如何在 Mac OS X 上使用 Objective-C 创建 Firefox 插件?

javascript - 页面加载时自动按键

ruby-on-rails - Rails 无法写入数据库中的序列化数组字段

php - Mongo 从集合中删除整个数组

javascript - 误解?为什么Javascript会自动执行变量?