JavaScript數組方法

一、基本類型和引用類型

  1. 數值、字符串、布爾值、undefined、null可以直接寫出來,比較簡單的數據稱為基本類型,在比較的時候,是直接按值比較。
  2. 對象、函數、數組復雜的數據是引用類型,在比較的時候,是按照地址比較。
console.log([1] === [1]); //falsevar a = []; //a其實存的是一個空數組的地址 引用
var b = a; //賦值也是 賦的這個引用
console.log(a == b); //turefunction fn(stu){stu.name = "張三"; //此時實參stu和形參stu指向同一個對象,按照地址,找到對象,改變名字stu = {name:"李四"}; //重新給形參stu賦值,和實參以及對象沒有關系
}
var stu = {name:"王五"};
fn(stu); //傳的是一個引用
console.log(stu.name); //張三
復制代碼

二、創建數組

  1. 創建數組的三種辦法: new Array(), Array(), [],三種方式創建出來都是一樣的。
  2. 數組的length可讀可寫。
var arr = [];//字面量
var arr = new Array(5); // array 的構造函數 [5] 創造一個空數組 長度為5
var arr = Array(1,2,3,5);// 內建函數  [5] 創造一個空數組 長度為5var arr = [1,2,3,4,5,6,7,8];
arr.length = 0;
console.log(arr);
復制代碼

三、數組的常用方法

  1. indexOf:查找數組中是否有待查找的數據,返回索引值,若找不到則返回-1,第二個參數表示從字符串中的哪個位置(索引值)開始搜索。使用的是===,數據類型必須一致,不能是兩個復雜數據類型直接比較,但可以用變量查找。
var arr = [3];
var arr1 = [1,2,3,4,5,arr,7,8];
console.log(arr1.indexOf(arr)); //5var arr = [1,2,"3",4,5,6,7,8]; 
console.log(arr.indexOf(3)); //-1
console.log(arr.indexOf(4,-1)); //-1
復制代碼
  1. concat:數組的拼接,返回的是一個新數組,不會改變原數組,存儲的引用類型為地址。
var arr = [1,2,3,[4]];
var arr1 = [6,7,8];
var arr2 = arr.concat(arr1); 
arr[3][0] = 10;
console.log(arr2);// [1,2,3,[10],6,7,8]
復制代碼
  1. join:把數組拼接成字符串,返回新字符串,不會改變原數組,默認用,拼接,接受傳參為拼接符號。
var arr = [1,2,3,4,5,6];
var str = arr.join('^');
console.log(str); //1^2^3^4^5^6
復制代碼
  1. slice:提取數組的一部分,生成一個新的數組,不會改變原數組,從索引取到索引[)。
var arr = [1,2,3,4,5,6];
console.log(arr.slice(1,3)); //[2,3]//將一個類數組轉化為數組的兩種方法
function add(){// console.log(arguments);// var arr = [];// for(var i=0;i<arguments.length;i++){//    arr[i] = arguments[i];// }// console.log(arr)// console.log(arguments);var arr = [].slice.call(arguments,0);console.log(arr);
}
add(1,2,3)
復制代碼
  1. Array.isArray():判斷是否是數組。
  2. reverse:反轉數組,改變原數組。
var arr = [1,2,3];
arr.reverse();
console.log(arr); //[3,2,1]
復制代碼

四、數組元素的刪除和增加

  1. delete:會留下空位。
var arr = [1,2,3,4,5,6,7,8];
for(var i=0; i<arr.length; i++){delete arr[i];
}
console.log(arr); //[empty*8]
復制代碼
  1. pop:刪除數組的最后一個元素,并且改變了原數組,返回值為刪除的那個元素,不能傳參。
var arr  = [1,2,3,4,5,6];
console.log(arr.pop()); //6
復制代碼
  1. shift:刪除數組的第一個元素,并且改變了原數組,返回值為刪除的那個元素,不能傳參。
var arr  = [1,2,3,4,5,6];
arr.shift();
arr.shift();
console.log(arr); //[3,4,5,6]
復制代碼
  1. push:在末尾添加新元素,可以是多個,用逗號分隔,返回值是新數組的長度。
var arr  = [1,2,3,4,5,6];
console.log(arr.push(7,8,[111])); //9
console.log(arr); //[1,2,3,4,5,6,7,8,[111]]var oBox = document.getElementById('box');
var stu = {name:'lisi',age:19};
[].push.call(stu,oBox); //有些數組方法 對象可以借用一下
console.log(stu);
復制代碼
  1. unshift:在開始添加新元素,可以是多個,用逗號分隔,返回值是新數組的長度。
var arr  = [1,2,3,4,5,6];
console.log(arr.unshift(7,8,[111]));
console.log(arr); //[7,8,[111],1,2,3,4,5,6]
復制代碼
  1. splice:刪除/添加元素。arr.splice(index, num, item1, item2.....),index是從哪開始的下標,num是刪除的個數,如果是0就不會刪除,item可選,表示要添加的元素。
//刪除
var arr = [1,2,3,4,5];
arr.splice(2,2);
console.log(arr); //[1,2,5]
//添加
var arr = [1,2,3,4,5];
arr.splice(2,0,"hello");
console.log(arr); //[1,2,"hello",3,4,5]
//刪除并添加
var arr = [1,2,3,4,5];
arr.splice(2,1,"hello");
console.log(arr); //[1,2,"hello",4,5]
復制代碼

五、數組的排序

  1. sort:改變原數組,將原數組轉化為字符串,然后按照Unicode編碼進行排序。
var arr = ['我','wangwu','zhaoliu','qianqi','lucy'];
arr.sort();
console.log(arr);
復制代碼
  1. sort可以接受一個回調函數,參數是一個函數體,改變排序的規則。
var arr = [156,14,21,2];
arr.sort(function(a,b){return a - b;//如果 a-b>0 表示a>b 交換位置//如果 a-b<0 表示a<b 不交換位置//如果 a-b=0 也不交換位置
});
console.log(arr);
復制代碼

六、數組遍歷的方法

  1. filter:過濾器,真的留下,假的扔掉。不改變原數組,返回新數組,參數是一個函數。通過自定義的過濾方法,返回新的數組。
var arr = [12,5,8,123,222];
var arr1 = arr.filter(function(item,index,array){return item>12;
})
console.log(arr1);var stu = [{name:'lisi',age:20},{name:'lily',age:18},{name:'lucy',age:22},{name:'hmm',age:30}
];
var newstu = stu.filter(function(item){return item.age>20; 
});
console.log(newstu);
復制代碼
  1. map:遍歷數組,由回調處理之后的一個新的返回值組成數組。
var number = [1,4,9];
var num = number.map(function(item,index,array){return Math.sqrt(item);
});
//var num = number.map(Math.sqrt);
console.log(num);
復制代碼
  1. forEach:通過回調處理接收的參數,無返回值。
var number = [1,4,9];
number.forEach(function(item,index,array){console.log(`a[${index}]=${item}`);
})// for(var i = 0;i < number.length; i++){
// 	console.log(`a[${i}]=${number[i]}`);
// }
復制代碼
  1. every所有為真則為真,some有一個為真則為真。every針對所有的回調函數的返回值,如果全為true,則最終結果為true。some針對所有的回調函數的返回值,有一個true,則最終結果為true。
var arr = [1,2,3,4];var bool = arr.some(function(item){return item%2 === 0;
})
console.log(bool);
復制代碼

七、數組去重

  1. 使用filter去重。
var arr = ['lisi','lucy','lily','hmm','lisi','lisi','hmm','lucy'];
var arr1 = arr.filter(function(item,index,array){return array.indexOf(item) === index;
})
console.log(arr1);
復制代碼
  1. 從后往前遍歷,取一個值,將這個值和數組中在這個值前面的每一個元素作比較。
var arr = ['lisi','wangwu','hmm','zhaoliu','wangwu','hmm','hmm','lisi'];
for(var i = arr.length-1; i >= 0; i--){for(var j = i-1; j>=0; j-- ){	if (arr[i] === arr[j]) {arr.splice(i,1);}}
}
console.log(arr);
復制代碼
  1. 從前往后依次遍歷,根據indexOf判斷是不是第一次出現的,若是第一次出現的就是push到新數組。
var arr = [1,2,3,4,5,6,5,4,3,2,1];
var arr2 = [];
for(var i=0;i<arr.length;i++){if( arr2.indexOf( arr[i] ) == -1 ){arr2.push(arr[i]);}
}
alert(arr2);
復制代碼

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536947.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536947.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536947.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

nodejs mysql模塊_NodeJs使用Mysql模塊實現事務處理

依賴模塊&#xff1a;1. mysql&#xff1a;https://github.com/felixge/node-mysqlnpm install mysql --save2. async&#xff1a;https://github.com/caolan/asyncnpm install async --save(ps: async模塊可換成其它Promise模塊如bluebird、q等)因為Node.js的mysql模塊本身對于…

計數排序vs基數排序vs桶排序

從計數排序說起 計數排序是一種非基于元素比較的排序算法&#xff0c;而是將待排序數組元素轉化為計數數組的索引值&#xff0c;從而間接使待排序數組具有順序性。 計數排序的實現一般有兩種形式&#xff1a;基于輔助數組和基于桶排序。 基于輔助數組 整個過程包含三個數組&…

多線程中ThreadLocal的使用

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

mysql 查看所有表的引擎_MySQL查看數據庫、表的占用空間大小以及某個庫中所有表的引擎類型...

本文章來給大家介紹一些常用的MySQL查看數據庫、表的占用空間大小sql命令吧&#xff0c;希望此教程 對各位同學會有所幫助。查看各庫的大小代碼如下復制代碼SELECT SUM(DATA_LENGTH)SUM(INDEX_LENGTH) FROM information_schema.tables WHERE TABLE_SCHEMAdatabase_name;結果是以…

Fusion組件庫是如何支持多語言能力的

隨著國際化發展&#xff0c;多語言的需求越來越常見&#xff0c;單一的語言已經遠不能滿足需求了。作為一個組件庫&#xff0c;支持多語言也是基本能力。 多語言功能的本質其實是文本的替換&#xff0c;一個詞匯“OK”&#xff0c;在英文語境下是“OK”&#xff0c;日語語境下是…

mysql 存儲過程 replace_mysql replace存儲過程

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云數據庫專家保駕護航&#xff0c;為用戶…

注解版poi操作工具

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

Kali Linux 2019.1 發布,Metasploit 更新到 5.0 版本

百度智能云 云生態狂歡季 熱門云產品1折起>>> Kali Linux 2019.1 發布了&#xff0c;Kali 前身 BackTrack&#xff0c;它是一個基于 Debian 的 Linux 發行版&#xff0c;主要用于信息安全行業&#xff0c;其包含了一系列安全、滲透測試和取證工具。此版本 Linux 內核…

peewee mysql_scrapy中利用peewee插入Mysql

前兩天老大布置一個任務&#xff0c;說爬下來的數據要存入數據庫中&#xff0c;丟給我一個peewee&#xff0c;說用這個。當時的我兩眼一抹黑&#xff0c;這是個什么東西呀&#xff0c;我知道scrapy的數據存入數據庫是在pipelines中進行設置但是peewee是什么東西呢。經過兩天不懈…

Java版數據結構與算法——線性表

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

基于 CODING 的 Spring Boot 持續集成項目

本文作者&#xff1a;CODING 用戶 - 廖石榮 持續集成的概念 持續集成(Continuous integration,簡稱 CI&#xff09;是一種軟件開發實踐&#xff0c;即團隊開發成員經常集成他們的工作&#xff0c;通常每個成員每天至少集成一次&#xff0c;也就意味著每天可能會發生多次集成。每…

lvs mysql 端口_LVS配置及多端口服務配置

一、5、各主機IP地址&#xff1a;主機IP網關Client192.168.86.116RouterF0/0:192.168.x.xFo/1:192.168.xx.xxF0/1DirectorEth0:192.168.86.111/24(DIP)Eth0:1:192.168.86.254/32(VIP)F0/1Real 1Eth0:192.168.86.112/24(DIP)lo:1:192.168.86.254/32(VIP)F0/1Real 2Eth0:192.168.…

Mybatis組成部分

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

Stream流與Lambda表達式(一) 雜談

一、流 轉換為數組、集合 package com.java.design.java8.Stream;import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner;import java.util.A…

一年java工作經驗-面試總結

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

linux mysql python包_03_mysql-python模塊, linux環境下python2,python3的

---恢復內容開始---1、Python2 正常[rootIP ~]#pip install mysql-pythonDEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 wont be maintained after that date. A future version of pip will drop …

我的這套VuePress主題你熟悉吧

最近熬了很多個夜晚, 踩坑無數, 終于寫出了用VuePress驅動的主題. 只需體驗三分鐘&#xff0c;你就會跟我一樣&#xff0c;愛上這款主題. vuepress-theme-indigo-material, 已經發布到npm, 請客官享用~~ 介紹 vuepress-theme-indigo-material 的原主題是hexo-theme-indigo, git…

兩年Java工作經驗應該會些什么技術

*************************************優雅的分割線 ********************************** 分享一波:程序員賺外快-必看的巔峰干貨 如果以上內容對你覺得有用,并想獲取更多的賺錢方式和免費的技術教程 請關注微信公眾號:HB荷包 一個能讓你學習技術和賺錢方法的公眾號,持續更…

centos 6 mysql 5.7.13 編譯安裝_Centos 6.5 下面 源碼編譯 安裝 Mysql 5.7.13

安裝軟件依賴包yum -y install gcc gcc-c ncurses ncurses-devel cmake下載軟件包cd /usr/local/srcwget https://downloads.mysql.com/archives/get/file/mysql-5.7.13.tar.gz --no-check-certificate下載 boost 庫&#xff0c;MySQL 5.7.5 開始Boost庫是必需的cd /usr/loca…

LeetCode 237. 刪除鏈表中的節點(Python3)

題目&#xff1a; 請編寫一個函數&#xff0c;使其可以刪除某個鏈表中給定的&#xff08;非末尾&#xff09;節點&#xff0c;你將只被給定要求被刪除的節點。 現有一個鏈表 -- head [4,5,1,9]&#xff0c;它可以表示為: 示例 1: 輸入: head [4,5,1,9], node 5 輸出: [4,1,9…