1. 程式人生 > >js深拷貝二維陣列

js深拷貝二維陣列

因為javascript分基本型別與引用型別(與java、c#類似)。Array是引用型別,所以直接用=號賦值的話,只是把源陣列的地址(或叫指標)賦值給目的陣列,並沒有實現陣列的資料的拷貝。

一維陣列深拷貝方法:

1、slice()

var arr = [1,2,3,4,5]
var arr2 = arr.slice(0)

2、concat()

var arr = [1,2,3,4,5]
var arr2 = arr.concat()

3、ES6擴充套件運算子

var arr = [1,2,3,4,5]
var [ ...arr2 ] = arr

二維陣列的深拷貝:

1、錯誤的方法

var a1=[["1","2","3"],"2","3"],a2;
a2=a1.slice(0);
a1[0][0]=0; //改變a1第一個元素中的第一個元素
alert(a2[0][0]);  //影響到了a2

這個方法只是複製了陣列的第一維,由於陣列第一維存放的是第二維的引用,而第二維才是實際存放他們的內容。

2、正確方法

let re=[];
for(let i=0;i<arr.length;i++){
    let [...arr1]=arr;
    re.push(arr1);
}

相關推薦

js拷貝陣列

因為javascript分基本型別與引用型別(與java、c#類似)。Array是引用型別,所以直接用=號賦值的話,只是把源陣列的地址(或叫指標)賦值給目的陣列,並沒有實現陣列的資料的拷貝。 一維陣列深拷貝方法: 1、slice() var arr = [1,2,3,4

JS實現陣列拷貝及外掛程式碼

深拷貝與淺拷貝的介紹 在寫程式碼前先簡短介紹下JS中淺拷貝與深拷貝的區別。 JavaScript中有兩種型別的物件拷貝:淺拷貝(Shallow Copy)、深拷貝(Deep Copy): 深複製和淺複製最根本的區別在於是否是真正獲取了一個物件的複製實體,而不是引用。 淺拷貝——只是拷貝了

2.Java陣列_一陣列陣列的動態初始化與靜態初始化、方法接收/返回/修改陣列、java對陣列的排序/全拷貝/部分拷貝

Java陣列----引用資料型別,必須在使用前先初始化;否則會nullPointerException(執行時異常)。 (引用傳遞:多個棧記憶體指向同一塊堆記憶體) 1.一維陣列初始化 (1)動態初始化(宣告並開闢陣列) 資料型別[] 陣列名稱 = new 資料型別[長度]; 如

陣列排序 及 陣列拷貝

多維陣列  java 支援兩種資料型別的多維陣列。第一種是矩形陣列,也稱等長陣列。在二維矩形陣列中,每一行有相同的列數。例:int[][] A = new int[4][2]; java 支援的第二種多維陣列是交錯陣列,即所謂的正交陣列、變長陣列、鋸齒形陣列。在二維交錯陣列中,每一行可以

C++ 陣列動態記憶體分配過載以及拷貝構造

總時間限制:  1000ms   記憶體限制:  65536kB // 在此處補充你的程式碼 描述 寫一個二維陣列類 Array2,使得下面程式的輸出結果是: 0,1,2,3, 4,5,6,7, 8,9,10,11, next

JS】 搜尋矩陣 #陣列 #二分查詢

編寫一個高效的演算法來判斷 m x n 矩陣中,是否存在一個目標值。該矩陣具有如下特性: 每行中的整數從左到右按升序排列。 每行的第一個整數大於前一行的最後一個整數。 示例 1: 輸入: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23,

java 基礎——陣列拷貝

文章目錄 for 迴圈拷貝 基本型別 引用型別 clone 方式拷貝 基本型別 引用型別 System.arraycopy() 基本型別

js陣列轉換json

     var dataObjsd=data.keyword;      var Object=new Array();         for(var i in dataObjsd

使用js將一個字串的資料拆分到陣列

/** *將此字串進行切割 資料新增到二維陣列內 var str = '1,2,3!4,5,6!7,8,9'; [[1,2,3],[4,5,6],[7,8,9]] */ var erWei = [] ; var str = '1,2,3!4,5,6!7,8,9'; var arr

js陣列陣列

廢話不多說直接上程式碼 var arr = ['0','1','2','3','4','5','6','7','8','9','10','11','12','13','14','15']; var newArr = []; var len = arr.length; for(let

js建立陣列小坑

今天在建立一個二維陣列時,遇到一個小坑,最後發現是對forEach函式的理解不夠深刻導致的bug,特此記錄說明。 需求如下:建立一個10 x 10的二維陣列 最常規的想法是,進行遍歷迴圈 let item = new Array(10); for( let i

Js陣列格式轉換問題

    專案中遇到個問題,就是後端給我一個如下的二維陣列: 即一個17項的陣列,每一項是一個長度為5的陣列,我暫時定義為17*5的陣列,而我需要轉換為5*17的陣列,即5項,每一項是一個長度為17的陣列。我使用的是將陣列遍歷兩次(效能可能會不好,但暫時只會使用這種)。我

JS中的一陣列陣列

一維陣列: 對於一維陣列的宣告有以下幾種: 1.var fruit=new Array(); 2.var fruit =new Array(3); 3.var fruit = new Arrat('3', '4'); 二維陣列的宣告: 1.var array=new Array(new Arrat

js 陣列 新增json資料及js陣列與json字串

 JSON(JavaScript Object Notation )是一種輕量級的資料交換格式,採用完全獨立於語言的文字格式,JSON是JavaScript原生資料格式。 下面給大家介紹js陣列新增json資料的兩種方式。 // 第一種方式 ? 1 2

js實現陣列的旋轉

我最近因為做了幾個小遊戲,用到了二維陣列,其中有需求將這個二維陣列正翻轉 90°,-90°,180°。 本人是笨人,寫下了存起來。 定義的基本二位陣列渲染出來是這種效果。 現在想實現的結果是下面的效果: 當然可以讓div用position定位,left和top調整。 但是我就想改變陣列的話,

js 陣列值被覆蓋問題

 1、var a=new Array();var b=new Array(); for(var i=0;i<2;i++){b.length=0; b.push('1'+i); b.push('2'+i); a.push(b); document.write("b=

cuda陣列記憶體分配和資料拷貝

因為cuda具有高效利用GPU進行科學計算的優勢,而人工智慧的重點之一就是複雜的計算任務,因此學好GPU計算是學習AI的重點任務。這裡,我們即將進行利用共享記憶體的矩陣運算。 我們看一個例子,如何對矩陣進行分配顯示卡記憶體以及元素賦值操作。通常來講,在GPU中分配記憶體使用的是cudaMalloc函式,

js實現簡單的一陣列變成陣列

陣列a為1~50的整數,b陣列為a陣列的前一個數除以後一個數所得的值,c陣列由b陣列每行5個排序而成。下面為javaScript程式碼實現: var a = new Array(); var b = new Array(); var c = new Array

js實現向後臺傳遞陣列

由於後臺只能接收從js傳來的字串,所以,要想把陣列傳到後臺必須要把陣列轉換成字串再傳,後臺取到字串後再處理,還原成陣列的形式。 js程式碼: function getExcel(){   var table=document.getElementById('mytable

js陣列定義和初始化的三種方法

<script> var allarray=new Array(); var res=""; function loaddata() { for(var i=0;i<3;i++) { var starth=i*200; var strarw=i*200; var