Unit05: 创建和访问数组 、 数组的常用方法_1
1.數組:
?
程序=數據結構+算法;
數據:變量...
算法:if if-else switch 循環........
?
好的數據結構,可極大提高程序的執行“效率”;相關的多個數據應集中存貯,集中管理;
?
引用類型:值不保存在變量本地的數據類型; ************
?
數組:一組"連續的變量"組成的集合 ------- 統一起一個名字;******* 批量管理多個數據;
???? 數組是引用類型的對象;
???? 變量中保存了數組對象的地址,也成引用了數組對象;
?
如何使用:
?????? 1.創建: 4種;
????????????? 1.var 變量名=[];
???????????????????? -->創建一個空數字對象;
????????????? 2.var 變量名=[值1,值2,......值n]
???????????????????? -->創建數組同時,維數組指定初始元素;
????????????? 3.var arr=new Array();
???????????????????? -->創建一個空數字對象
???????????????????? new:創建一個新對象,并返回新對象地址;
???????????????????? Array:js中的數組類型;
???????????????????? new Array():創建一個“數組類型”的“新對象”;并返回新對象的地址;
????????????? 4.var arr=new Array(n);
???????????????????? -->創建n個元素的數組,但每個元素是空的;
???????????????????? new Array(值1,值2,......值n);
?
????????????? 找到數組:使用變量等效于直接使用變量引用的數組對象;
???????????????????? ? 在數組對象中,每個元素都有一個下標,每個元素的位置號;下標從0開始,到元素個-1結束;
????????????? 使用數組的每個元素:
???????????????????? 數組變量[i]-->獲得i位置元素中的值;數組中的變量與普通變量用法完全一樣;
?
?????? 2.賦值:數組變量[i]=新值;
?????? 3.取值:數組變量[i]
?
?????? null 和 undefined
?????? undefined:所有沒有值得變量的默認值,自動復制。
?????? null:主動釋放一個變量的對象;
?????? ????? 當使用完一個較大的對象時,“主動釋放”對象;是好的習慣;
?
?????? ????? 垃圾回收器:專門釋放對象內存的一個程序;
?????? ????????????????? 底層,后臺,伴隨當前程序,同時運行;
???????????????????? ? 引擎,會定時自動調用,垃圾回收器;
???????????????????? ? 只有一個對象,不再被任何變量引用時,才會釋放;
?
?
?????? js中的數組 VS 其他語言的數組
?????? js中的數組:下標超出不會出錯;
????????????? ?? 為不存在的下標位置“賦值”:會自動創建指定下標的新元素;
????????????? ?? 為不存在的下標位置“取值”:不會出錯,也不會增加新元素,而是返回 undefined;
?
console.log(),并不是完全順序執行;可能異步執行;
?
“賦值表達式”的結果是“等號右邊的值”;(demo1)************
?
1.length
?????? 數組是對象:封裝了一組數據,并提供對數據的操作方法;
?????? .length屬性:獲得數組中的元素個數 != 實際元素個數;
????????????? 何時使用:
????????????? 1.arr[arr.length-1]:獲得任意長度數組中的最后一個;********
????????????? 2.arr[arr.length]=新值;向數組末尾追加一個新元素;
????????????? 2.arr.length改小,會刪除length后面的項;
?
2.數組遍歷
?????? 從下標0位置開始,依次取出每個元素,反復執行相同的操作;
?????? 三要素:
?????? 1.循環條件:下標從0開始,<length;
?????? 2.循環變量:下標i,從0開始,每次遞增1,到length-1結束;
?????? 3.循環體:
?
3.關聯數組
?????? 可以自己定義下標名稱的數組;
?????? 如何創建關聯數組:
?????? 1.先創建一個空數組:
?????? ? var fbb=[];
?????? ? fbb["name"]="范冰冰";
?????? ? fbb["height"]="180cm";
?????? ? fbb["age"]=35;
?????? ????? 下標??? 值
?????? ????? 下標必須帶引號;
?????? 關聯數組中的.length屬性失效.**********
?
?????? 關聯(哈希hash)數組:下標不能重復;****
???????????????????? ? 賦值和取值都是,利用“哈希算法(算出一個數)”,快速"精確"定位某個下標的“位置”,不用遍歷;*********
?
?????? 索引數組:缺點:下標自動分配,無意義,
???????????????????? 要想按內容查找元素,只能從頭開始遍歷;
?
?????? 遍歷關聯(哈希hash)數組:
????????????? 依次遍歷arr中的元素,將當前元素的"下標"存入key中;**********
????????????? for(var key in arr){ 遍歷數組中的每個key,in前面可以放任何變量
???????????????????? key:僅得到當前元素的下標;
???????????????????? arr[key]:得到當前元素的值;
?
????????????? }
?
?????? (哈希hash)數組:保存的是key value對兒;去重復*********demo3;
?
4.冒泡排序 demo4
?
?????? var arr=[4,2,5,3,8,7,6];
?????? //遍歷數組中每個元素
?????? //下標從0開始,到<arr.length-1結束,下標++
?????? //如果當前元素>下一個位置的元素 交換兩元素的位置;
?????? //聲明變量pmt,用于交換;
?????? /******
?????? for(var i=0,tmp=0;i<arr.length-1;i++){
????????????? if(arr[i]>arr[i+1]){
???????????????????? tmp=arr[i];
???????????????????? arr[i]=arr[i+1];
???????????????????? arr[i+1]=tmp;
????????????? }
?
?????? }
?????? //第n輪:n從1開始,到<length結束;
?????? for(var i=0,tmp=0;i<arr.length-n;i++){
????????????? if(arr[i]>arr[i+1]){
???????????????????? tmp=arr[i];
???????????????????? arr[i]=arr[i+1];
???????????????????? arr[i+1]=tmp;
????????????? }
?
?????? }
?????? *******/
?????? for(var n=1;n<arr.length;n++){
????????????? for(var i=0,tmp=0;i<arr.length-n;i++){
???????????????????? if(arr[i]>arr[i+1]){
??????????????????????????? tmp=arr[i];
??????????????????????????? arr[i]=arr[i+1];
??????????????????????????? arr[i+1]=tmp;
???????????????????? }
?
????????????? }
?????? }
?????? console.log(arr);????
?
5.數組API
?????? 數組=數據+操作數據的API
?????? 1. 數組 to String:2種:
????????????? var str=arr.toString();
???????????????????? -->輸出數組中的內容,每個元素用逗號分隔
???????????????????? -->自動調用
????????????? var str=arr.join("連接符")
???????????????????? -->輸出數組中的內容,自定義元素間連接符
???????????????????? 何時使用:2種固定套路
???????????????????? 1. 將字符組成單詞:arr.join("")
???????????????????? 2. 將單詞組成句子:arr.join(" ")
?
?????? 2. 拼接和截取:*API無法直接修改原對象,而返回新對象*
????????????? 拼接:var newArr=arr.concat(另一個數組,值1,值2...)
????????????? 復制子數組:var subArr=arr.slice(starti,endi+1);
???????????????????????????????????????????????? 含頭不含尾
?
?????? 3. splice: 刪除?? 插入??? 替換
????????????? 1. 刪除:直接修改原數組對象
???????????????????? [var deleted=]arr.splice(starti,刪除個數)
???????????????????? 返回本次刪除元素組成的數組
????????????? 2. 插入:
???????????????????? arr.splice(starti,0,新值1,...)
????????????? 3. 替換:
???????????????????? arr.splice(starti,刪除個數,新值1,...)
????????????? 4. arr.reverse(); 顛倒數組中所有元素
?
?
優化:
?????? 1.問題:頻繁字符串拼接,造成內存浪費;(頻繁+=會有浪費的字符串;)
?????? ? 解決:先將要拼接的字符串放入數組;
????????????? 最后 arr.join("");
?
轉載于:https://www.cnblogs.com/mbyund/p/6406718.html
總結
以上是生活随笔為你收集整理的Unit05: 创建和访问数组 、 数组的常用方法_1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 求一个关于被关心的个性签名!
- 下一篇: Mysql中的DCL