这么问题看似很简单,但是并不是很简单。(可能只是针对我一个人而言吧,哈哈哈哈,进入正题)。

今天提交代码的时候,发现测试用例只跑通了 66.7%。我当时在本地测试时可以的,我还有点儿纳闷,于是,重新捋了一遍代码,嗯嗯...发现,是数组给数组赋值的时候出了点儿问题。

错误代码:(测试用例跑通了66.7%)

function append(arr, item) {var newArr = arr;newArr.push(item);return newArr
}

正确代码:(测试用例跑通了100%)

function append(arr, item) {var newArr = JSON.parse(JSON.stringify(arr))newArr.push(item);return newArr;
}

上面两段代码的区别就是给数组赋值的时,是不一样的。

(1)使用 =  来赋值的,是通过浅拷贝来赋值的。

(2)通过JSON.parse(JSON.stringify(arr)) 来赋值的, 是先转换成字符串,再转换成数组,是通过深拷贝来完成的。

=================下面说下数组中的【深拷贝】和【浅拷贝】的问题(有错误的可以指出来奥)=============

实现数组的深拷贝有如下几种方法:

深拷贝完成后,再次去修改原数组,拷贝得到的数组值是不会变化的。

浅拷贝则会跟着原数组变化。

(一)for循环来实现数组的深拷贝。

// 7.数组的深拷贝(for循环来完成)
var old_arr = [11, 22, 33, 44, 55, 66];
var new_arr = copyArr(old_arr);function copyArr(arr) {var newArr = [];for (var i = 0; i < arr.length; i++) {newArr.push(arr[i]);}return newArr;
}
console.log(new_arr);   //拷贝结果: [11, 22, 33, 44, 55, 66]

(二)slice() 实现数组的深拷贝。

var arr_old = [111,222,333,444,555]
var arr_new = arr_old.slice(0);    // slice(0)  从0开始选,一直到结尾// 测试:原数组改变.会影响深拷贝数组么?(不会影响)
arr_old[5] = 'aaa';
console.log(arr_new);   //  [111, 222, 333, 444, 555]
console.log(arr_old);   //  [111, 222, 333, 444, 555, "aaa"]

(三)concat() 实现数组的深拷贝。

var arr = [11,22,33,44,55]
var arr2 = arr.concat()
console.log(arr2)   //  [11, 22, 33, 44, 55]// 测试:如果改变原数组,看深拷贝的数组是否会发生变化呢(答案是不会发生变化的,只有原数组会发生变化)
arr[5] = 10;   // 改变原数组
console.log(arr);   // 原数组被改变了  [11, 22, 33, 44, 55, 10]
console.log(arr2);   // 深拷贝的数组没有改变   [11, 22, 33, 44, 55]

(四)ES6 实现数组的深拷贝。

var arr3 = ['aa','bb','cc','dd'];
var [...arr4] = arr3;
console.log(arr4);// 测试:原数组改变.会影响深拷贝数组么?(不会影响)
arr3[1] = 'oooo';
console.log(arr3);    // ["aa", "oooo", "cc", "dd"]
console.log(arr4);    //  ["aa", "bb", "cc", "dd"]

(五)使用JSON.parse( JSON.stringigy( ) ) 实现数组的深拷贝。

var arr5 = ['a','b','c','d','e'];
var arr6 = JSON.parse(JSON.stringify(arr5));// 测试:原数组改变.会影响深拷贝数组么?(不会影响)
arr5[2] = 0;
console.log(arr5);    //  ["a", "b", 0, "d", "e"]
console.log(arr6);    //  ["a", "b", "c", "d", "e"]

-------------大概就是这些了。

数组如何给数组赋值呢。嗯,看似小问题。相关推荐

  1. delphi数组与c语言数组不同,delphi数组间的赋值

    解决方案: 将this指针作为参数传递给静态函数,这样可以通过该this指针访问所有的私有变量, 但是我要是还需要向静态函数中传递我自己需要的参数呢.在函数参数中使用数组的时候,数组将被转换为指针处理 ...

  2. ES6数组的解构赋值( 中)

    数组的解构赋值的用法有以下几情况要注意: 1.结构赋值可以嵌套的 数组的解构赋值的用法有以下几情况要注意:1.结构赋值可以嵌套的 var [ a,b,[ c1,c2 ] ] = [ 1,2,[ 3.1 ...

  3. 【C 语言】一级指针 易犯错误 模型 ( 判定指针合法性 | 数组越界 | 不断修改指针变量值 | 函数中将栈内存数组返回 | 函数间接赋值形参操作 | 指针取值与自增操作 )

    文章目录 一.判定指针合法性 二.数组越界 三.不断修改指针变量值 四.函数中将栈内存数组返回 五.函数间接赋值形参操作 六.指针取值与自增操作 一.判定指针合法性 判定指针合法性时 , 必须进行如下 ...

  4. 数组的解构赋值(未完成)

    解构赋值: 如果要解构数组,那么声明变量的时候就要是个数组(左右两边都要是数组). // 报错 let [foo] = 1; let [foo] = false; let [foo] = NaN; l ...

  5. 1.2 一维数组的定义、赋值和初始化

    当数组中每个元素都只带有一个下标时,这种数组就是"一维数组".一维数组(one-dimensional array)实质上是一组相同类型数据的线性集合,是数组中最简单的一种数组. ...

  6. python 矩阵元素赋值_对numpy中数组元素的统一赋值实例

    Numpy中的数组整体处理赋值操作一直让我有点迷糊,很多时候理解的不深入.今天单独列写相关的知识点,进行总结一下. 先看两个代码片小例子: 例子1: In [2]: arr =np.empty((8, ...

  7. 五大板块(1)—— 数组的定义,赋值与应用

    参考:五大板块(1)-- 数组的定义,赋值与应用 作者:丶PURSUING 发布时间: 2021-03-18 16:00:05 网址:https://blog.csdn.net/weixin_4474 ...

  8. js遍历json数组给html td赋值,JS实现给json数组动态赋值的方法示例

    关注微信公众号 JS实现给json数组动态赋值的方法示例 转载  更新时间:2017年07月04日 10:19:00   作者:小魏的马仔 这篇文章主要介绍了JS实现给json数组动态赋值的方法,结合 ...

  9. python 结构体数组_python实现结构体数组(初始化并赋值)

    标签: C语言中结构体数组概念及定义 一个结构体变量可以存放一个学生的一组信息,可是如果有 10 个学生呢?难道要定义 10 个结构体变量吗?难道上面的程序要复制和粘贴 10 次吗? 很明显不可能,这 ...

  10. ES6 数组的解构赋值

    数组的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = ...

最新文章

  1. mysql 按两列排序吗_按两列排序MySQL表
  2. Java传统的io和nio区别_Java中IO和NIO的本质和区别
  3. JDBC——入门知识【转】
  4. 神经网络的量子化假设
  5. java string对象创建对象_Java String 创建了几个对象
  6. node mysql做项目视频教程_2018最新 自学Node/Node.js/Nodejs视频教程 后端框架Express项目实战...
  7. 序列化模块和hashlib模块
  8. 人人都可以写的可视化Python小程序第二篇:旋转的烟花
  9. 十五种小游戏代码(有0积分下载的哦)
  10. eclipse及tomcat设置编码
  11. MySQL5.7官网参考手册路径
  12. Nginx跨域配置 proxy_pass
  13. C语言中scanf函数的用法
  14. --legacy-peer-deps 作用
  15. ElasticSearch设置字段的keyword属性
  16. 吉林省注册公司流程:第一步 企业名称预先核准流程。
  17. ACE_TAO 014 ACE_Event_Handler
  18. 用户界面测试(来源于百度百科)
  19. cmd命令行 【超快】定位到指定路径
  20. 《乔布斯传》今日(10/24)10时05分全球同步首发

热门文章

  1. 动手写一个微信聊天页,有文字,有语音,有图片
  2. echarts饼图指示器文字颜色设置不同
  3. 关于字符串结束符'\0'
  4. 网络安全工程师千峰学习总结第四天
  5. Microsoft Hololens开发上手(2)
  6. mysql 日志重做,mysql 物理日志之redo log(重做日志)原理和介绍
  7. 风华是一指流砂,苍老了一段年华
  8. JavaScript基础实战知识点记录及个人理解2
  9. 计算机术语新年祝福,用计算机语言祝福大家新年快乐!
  10. navicat筛选某些列