首页 > 编程知识 正文

二维数组,字符数组整体赋值

时间:2023-05-03 09:09:45 阅读:62038 作者:1232

这样的问题看起来很简单,但并不简单。 (可能只是为了我一个人,哈哈,进入正题。

今天提交代码时,测试用例只打通了66.7%。 我在本地测试的时候很好,但还是有点纳闷。 于是,我又试着捋了一下代码。 嗯,嗯。 注意到数组为数组赋值时出了点问题。

3358 www.Sina.com/function append (arr,item ) { var newArr=arr; newARR.push(item ); 返回新ARR } http://www.Sina.com/function append (arr,item ) var new arr=JSON.parse (JSON.stringify ) arr ) NR RRR }上面两个代码的区别在于为数组赋值时不同。

)1)使用=赋值是在浅副本中赋值。

)2)在JSON.parse(JSON.Stringify(arr ) ) )中赋值,是先转换为字符串,再转换为数组,在深度复制中进行。

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

有多种方法可以实现数组的深度复制。

深度复制完成后,再次修改原始数组不会更改复制数组的值。

浅副本将更改以匹配原始数组。

(一)使用for循环实现数组的深度复制。

//7 .数组的深度复制(在for循环中完成) varold _ arr=[ 11、22、33、44、55、66 ]; varnew _ arr=复制arr (old _ arr ); functioncopyarr(arr ) { var newArr=[]; for(varI=0; i arr.length; I({newARR.push ) ARR[I]; }返回新Arr; }控制台. log (new _ arr ); //结果副本: [ 11,22,33,44,55,66 ] (2) slice )实现数组的深度复制。

vararr _ old=[ 111,222,333,444,555 ] vararr _ new=arr _ old.slice (0); 从//slice(0) 0中选择,直到最后(/测试:元数组发生变化。 会影响深拷贝序列吗? (无影响) arr_old[5]='aaa '; 控制台. log (arr _ new ); //[ 111,222,333,444,555 ]控制台. log (arr _ old ); //[ 111,222,333,444,555,' AAA ' (三) concat ) ]实现数组的深度复制。

vararr=[ 11,22,33,44,55 ] vararr2=arr.concat () console.log ) arr2)/[ 11,22,33,44,55 ] /对于测试//深度拷贝的排列不改变[ 11,22,33,44,55 ] (四) ES6,实现数组的深度拷贝。

var arr3=['aa '、' bb '、' cc '、' dd']; var [.arr4]=arr3; 控制台. log (arr 4; 测试:元数组的更改。 会影响深拷贝序列吗? (不影响) arr3[1]='oooo '; 控制台. log (arr 3; //['aa '、' oooo '、' cc '、' DD']console.log(arr4); //['aa '、' bb '、' cc '、' DD ' (五) JSON.parse(JSON.stringigy ) )实现数组的深度复制。

var arr5=['a '、' b '、' c '、' d '、' e']; vararr6=JSON.parse (JSON.stringify (arr5); 测试:元数组的更改。 会影响深拷贝序列吗? (不影响) arr5[2]=0; 控制台. log (arr 5; //['a '、' b '、0、' d '、' e']console.log(ARR6); //['a '、“b”、“c”、“d”、“--------大概就这些吧。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。