直接等于号,使用扩展运算符(...),Array.from(),Array.prototype.slice()方法赋值数组区别

一、 const originalArray = [1, 2, 3];
const newArray = originalArray;

直接使用等于号赋值数组实际上是将原始数组的引用赋给新的数组,而不是创建一个新的数组。这意味着原始数组和新数组实际上指向了同一个内存地址,因此对新数组的修改也会反映在原始数组上

二、const originalArray = [1, 2, 3];
const newArray = [...originalArray];

扩展运算符(...)可以用于将一个数组展开,创建一个新的数组。使用扩展运算符可以实现浅复制,即创建一个新的数组,但是新数组中的元素仍然是原始数组中的引用。这意味着对新数组中的对象或数组的修改仍然会影响到原始数组。

三、const originalArray = [1, 2, 3];
const newArray = Array.from(originalArray);

Array.from()方法可以将一个类数组对象或可迭代对象转换为一个新的数组。它也可以用于复制一个数组并创建一个新的数组。与扩展运算符类似,Array.from()方法也是实现浅复制。新数组中的元素仍然是原始数组中的引用,因此对新数组中的对象或数组的修改仍然会影响到原始数组。

四、const originalArray = [1, 2, 3];
const newArray = originalArray.slice();

Array.prototype.slice()方法可以用于从一个数组中创建一个新的数组。传递空参数给slice方法将返回一个与原始数组相同的浅拷贝。与扩展运算符和Array.from()方法类似,slice方法也是实现浅复制。新数组中的元素仍然是原始数组中的引用,因此对新数组中的对象或数组的修改仍然会影响到原始数组。

综上所述,扩展运算符、Array.from()方法和Array.prototype.slice()方法都可以用于复制一个数组,但它们都是实现浅复制的,新数组中的元素仍然是原始数组中的引用。如果需要进行深复制,即创建一个完全独立的新数组,可以使用lodash-es中的cloneDeep函数,或者它能够递归地复制数组或者JSON序列化,JSON.parse(JSON.stringify(originalArray));但是需要注意的是,使用JSON.stringify()和JSON.parse()的方式有一些限制,比如无法处理函数、正则表达式等特殊类型的属性。而使用lodash的cloneDeep()方法可以处理更多类型的属性,同时也更为灵活和可靠。

import { cloneDeep } from 'lodash-es';

const originalArray = [{ name: 'John', age: 11 }, { name: 'Jane', age: 22 }];
const clonedArray = cloneDeep(originalArray);

clonedArray[0].name = 'Mike';

console.log(originalArray); // [{ name: 'John', age: 11 }, { name: 'Jane', age: 22}]
console.log(clonedArray); // [{ name: 'Mike', age: 11}, { name: 'Jane', age: 22}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值