日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

js array 删除指定元素_数组--学习笔记(数据结构数组 /js数组)

發(fā)布時間:2023/11/27 生活经验 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js array 删除指定元素_数组--学习笔记(数据结构数组 /js数组) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習目標:

  • 了解什么是數組;
  • 數組如何訪問內存地址(一維,二維);

什么是數組

由相同類型的元素的集合所組成的數據結構,分配一塊連續(xù)的內存來存儲。利用元素的索引可以計算出該元素對應的存儲地址。 最簡單的數據結構類型是一維數組。

數組如何實現隨機訪問?

數組是一種線性表數據結構,用一直連續(xù)的內存空間來儲存一組具有相同類型的數據。

根據數組的特性(連續(xù)存儲內存空間并且是線性表),才使用數組具有隨機訪問的特性。

缺點:

  1. 為了保持數組在內存中的連續(xù)性,使得數組插入或者刪除一個數據都需要做大量的搬移工作。

數組如何根據下標實現隨機訪問性?

計算機會給每個內存單元分配一個地址,計算機通過地址來訪問內存中的數據。當計算機需要隨機訪問數組中的元素時,會通過下面的尋址公式來計算該元素在內存中存儲的內存地址。

a[i]_address=base_address+i*data_type_size;

其中data_type_size表示數組中每個元素的大小,比如儲存的是int類型,那么data_type_size為4個字節(jié)。

數組要從0開始編號,而不是從1開始呢?

從數組儲存的內存模型上來看,“下標”最確切的定義應該是“偏移 offset”。

如果數組從1開始計數,那么內存地址公式變成

a[i]_address=base_address+(i-1)*data_type_size;

不難發(fā)現需要多計算一個減法運算,對于CPU來說,就多了一條減法指令。

jvm標記清除垃圾回收算法:先記錄數據需要被刪除的數據(數組刪除會引發(fā)數據搬移的工作,因為數組需要保持它的連續(xù)性),當數組沒有更多空間存儲數據時,再觸發(fā)一次真正的刪除操作。

JavaScript數組的特點:

JavaScript的數組,在相同類型條件下,大小沒有超過它設定的是按照數據結構中的數組設置的,如果超過設置的內存或者存放不同數據類型都是使用Hash Table (Map)存儲的。

  1. 支持存放不同類型數據;

有大小現在 length最大值為232 -1 --> Ecmascript 262;

v8引擎如何實現數組的?

  1. js數組長度是動態(tài)的,創(chuàng)建的時候無需聲明一個固定的長度(可可以指定)。
  2. js數組可能是數組索引不連續(xù)的稀疏數組。
  3. 數用組length表示數組的長度;
  4. 對于稀疏數組,表示元素的個數。
  5. 同一個數組中可以是相同類型的元素,也可以是不相同類型的元素;

V8對數組分Fast ElementsDirctionary Elements兩種存儲方式進行儲存。

Fast Elemeents: 傳統(tǒng)的線性存儲方式;

Fast Holey Elements: 空洞模式(存在未給元素賦值的情況--undefined);

Dirctionary Elements:Hash表存儲;

length超過1024的時候轉Dirctionary模式;

避免模式轉換,也避免空洞模式。

數組其他事項:

  1. If length > 232 - 1, throw a RangeError exception;
  2. If length is -0, set length to +0;
  3. 數組的length屬性描述符 { [[Value]]: length, [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: false })。
  4. 數組的屬性描述符 [[Extensible]] to true.

js的數組方法

  • 數組的創(chuàng)建
//字面量 let arr=[1,3,5]; //構造函數 let arr1=new Array(1,3,5); let arr2=Array(1,3,5); 

Array() 和 new Array()效果一樣,一個參數都是代碼數組的長度,大于等于2個參數,都是代表創(chuàng)建數組對應的元素。

  • 數組的存取方法 indexOf() / join(),toString()/concat(),splice() :
  1. indexOf()根據值返回值所對應的下標;
  2. join(),toString() 數組轉字符串;
  3. concat()合并多個數組來形成新數組,不影響原來的數組。

合并數組,如果數組是非一維數組(比如二維、三維數組),不會將它們扁平化。

let arr=new Array(8); 
let arr4=[[1,2]];console.log(arr1.concat(arr4,[5,6,7]));//[ 1, 2, 3, [ 1, 2 ], 5, 6, 7 ]
    1. splice() 截取一個數組的子集作為一個新數組,影響原來的數組;
  • 語法splice(start[, deleteCount[, item1[, item2[, ...]]]]) --- [三個參數 start/ deleteCount / item1,item2 ]
  • start為非負數的情況
    • start>=length,不會刪除數組的任何元素;
  • start為非正數的情況
    • 如果start+array.length >= 0 從后開始數;
    • 如果start+array.length < 0 從0開始數;
  • 第三個參數如果不加,則表示從數組中刪除元素,如果添加第三個參數,表示從數組中添加元素;
  • 可變函數 push(), unshift(), pop(), shift()
 let arr=[1,2,3,4]; 
arr.push(5,6,7);//[1,2,3,4,5,6,7]  數組的末尾添加元素//數組的頭添加元素  arr.unshift(5,6,7);//[5,6,7,1,2,3,4] //此方法無參數 
arr.pop();// 數組尾刪除一個元素 
arr.shift();//數組頭刪除一個元素
  • 迭代器方法
    • 返回新數組 map() / filter();
    • 不返回新數組 forEarch() 、every()、some()、reduce().

forEarch() 返回值undefined, 不改變原來的數組。

every()返回值為boolean值, 不改變原來的數組。每個元素都為true,才返回true。

some()返回值為boolean值, 不改變原來的數組。只有有元素為true,就返回true。

reduce()可以用來字符串拼接,求和等。

  • 二維數組

arr=[[1,2,3],[4,5,6]]; console.log(arr[1][0]); //第一個下標代表行 第二個下標代表列

參考文獻:

ChromeV8引擎中Javascript數組實現分析與性能優(yōu)化.pdf?max.book118.comArrayCreate?www.ecma-international.org

如果您覺得get到時了新知識 請我喝杯咖啡吧

wxp://f2f0ZCPViuTt3GtyInH_XBo9dMG-9J3wzdBh (二維碼自動識別)

https://qr.alipay.com/fkx13050fxko05jvyheaz93 (二維碼自動識別)

總結

以上是生活随笔為你收集整理的js array 删除指定元素_数组--学习笔记(数据结构数组 /js数组)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。