首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js数组 赋值数组

在JavaScript中,数组赋值有多种方式,包括浅拷贝和深拷贝。以下是一些常见的数组赋值方法及其特点:

1. 直接赋值

代码语言:txt
复制
let arr1 = [1, 2, 3];
let arr2 = arr1;

特点

  • arr2arr1 指向同一个数组对象。
  • 修改 arr2 也会影响 arr1

2. 浅拷贝

使用 slice() 方法

代码语言:txt
复制
let arr1 = [1, 2, 3];
let arr2 = arr1.slice();

使用展开运算符 ...

代码语言:txt
复制
let arr1 = [1, 2, 3];
let arr2 = [...arr1];

特点

  • arr2arr1 的浅拷贝。
  • 如果数组元素是基本类型(如数字、字符串),修改 arr2 不会影响 arr1
  • 如果数组元素是对象,修改对象的属性会影响原数组。

3. 深拷贝

使用 JSON.parse(JSON.stringify(arr))

代码语言:txt
复制
let arr1 = [{a: 1}, {b: 2}];
let arr2 = JSON.parse(JSON.stringify(arr1));

特点

  • arr2arr1 的深拷贝。
  • 修改 arr2 不会影响 arr1,即使是对象元素。

使用递归函数

代码语言:txt
复制
function deepCopy(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }
  let copy = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      copy[key] = deepCopy(obj[key]);
    }
  }
  return copy;
}

let arr1 = [{a: 1}, {b: 2}];
let arr2 = deepCopy(arr1);

特点

  • 可以处理更复杂的对象结构。
  • 不会受到循环引用的影响。

应用场景

  • 直接赋值:适用于不需要修改数组内容的场景。
  • 浅拷贝:适用于数组元素为基本类型或不需要深度修改对象属性的场景。
  • 深拷贝:适用于需要完全独立副本的场景,尤其是数组元素为复杂对象时。

常见问题及解决方法

问题:修改 arr2arr1 也发生了变化。

原因:使用了直接赋值或浅拷贝,导致两个变量指向同一个数组对象。 解决方法:使用深拷贝方法创建数组副本。

问题:JSON 方法无法处理函数、undefinedInfinity 等特殊值。

原因JSON.stringify 会忽略这些值。 解决方法:使用递归函数进行深拷贝,或者根据需求选择合适的拷贝方法。

通过以上方法,可以根据具体需求选择合适的数组赋值方式,避免不必要的副作用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的沙龙

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券