国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

全面解析Javascript數組方法

來源:懂視網 責編:小采 時間:2020-11-27 20:04:35
文檔

全面解析Javascript數組方法

全面解析Javascript數組方法:本文主要和大家分享Javascript數組方法,希望能幫助大家更加理解Javascript數組。Javascript 數組方法全解析(包含es6)1. 數組自帶屬性 constructor //返回創建數組對象的原型函數 length //返回數組對象的長度 prototype //這個是老熟人了,可
推薦度:
導讀全面解析Javascript數組方法:本文主要和大家分享Javascript數組方法,希望能幫助大家更加理解Javascript數組。Javascript 數組方法全解析(包含es6)1. 數組自帶屬性 constructor //返回創建數組對象的原型函數 length //返回數組對象的長度 prototype //這個是老熟人了,可

本文主要和大家分享Javascript數組方法,希望能幫助大家更加理解Javascript數組。

Javascript 數組方法全解析(包含es6)

1. 數組自帶屬性

 constructor //返回創建數組對象的原型函數
length //返回數組對象的長度
prototype //這個是老熟人了,可以增加數組的原型方法和屬性,這個放在后面的繼承中講

2. 數組的方法

//首先讓我們看看數組的對象屬性。
Array.prototype

1. concat

用法:用來連接多個數組的方法
有了這個方法之后我們連接多個數組就方便了
array1.concat(array2,array3,...,arrayX) 該參數可以是一個具體的值也可以是數組對象
let arr = [];
let arr1 = [1,2,3,4,5,6];
let pos = 7;
console.log(arr.concat(arr1,pos)); // =>[1,2,3,4,5,6,7]

//ok 我們再看一個厲害的,合并一維數組和二維數組
var num1 = [[1]];
var num2 = [2, [3]];

var nums = num1.concat(num2);

console.log(nums); // =>[[1], 2, [3]]
console.log(nums[0][0]); // =>1

2. copyWithin()
用法:淺復制數組的一部分到同一數組中的另一個位置,并返回它,而不修改其大小
重點是不改變大小

arr.copyWithin(target)

arr.copyWithin(target, start)

arr.copyWithin(target, start, end)

arr.copyWithin(目標索引, [源開始索引], [結束源索引])

target(必須) 0為基底的索引,如果target為負數的話那么target為length+target
start(可選) 0為基底的索引,如果start為負數的話那么start為length+start 如果省略的話就是0
end(可選) 0為基底的索引,如果end為負數的話那么end為length+end 如果省略的話就是arr.length
start=>end 在數學中是[) 比如(0,2)表示選下標0,1 (1,4)表示選下標 1,2,3,同理類推
我們來看幾個例子

[1, 2, 3, 4, 5].copyWithin(-2); 
//=> [1,2,3,1,2] targer為-2,也可以等于-2+5=3 start和end省略 所以等同于copyWithin(3,0,5)

[1, 2, 3, 4, 5].copyWithin(0, 3); // => [4,5,3,4,5]

[1, 2, 3, 4, 5].copyWithin(0, 3, 4); //=> [4,2,3,4,5]

[1, 2, 3, 4, 5].copyWithin(-2, -3, -1);
//=>[1, 2, 3, 3, 4] -2等同于-2+5=3 -3等同2 -1等同于4 所以等同于copyWithin(3,2,4)

//ok,我們再來看一個特殊的,copyWithin并不單單能對數組對象使用還能對類數組對象使用
[].copyWithin.call({length:5, 3:1},0,3); //=> {0:1,3:1, length:5}
/*為什么會出這么個玩意?別急待我一步一步和你說
{length:5, 3:1} => {0:undefined,1:undefined,2:undefined,3:1,4:undefined,length:5}
[].copyWithin => Array.prototype.copyWithin.call()這一步也就是把類數組能使用數組的copyWithin方法.
[].copyWithin.call({length:5, 3:1},0,3)=>[undefined,undefined,undefined,1,undefined].copyWithin(0,3)=>[1,undefined,undefined,1,undefined]=>{0:1,3:1, length:5}
*/

3. entries
用法:array.entries(); 返回一個新的Array Iterator對象,該對象包含數組中每個索引的鍵值對
我們先看一段代碼:

var arr= ['a','b','c'];

var Iterator = arr.entries(); //返回一個Array Iterator對象
console.log(Iterator.next().value); //=>[0:"a"]
console.log(Iterator.next().value); //=>[1:"b"]
console.log(Iterator.next().value); //=>[2:"c"]

ok,介紹完基本用法之后我們來看一下具體應用

//二維數組排序
var arr = [[1,34],[456,2,3,44,234],[4567,1,4,5,6],[34,78,23,1]];

function sortArr(arr){

var pos = true;
var Iteartor = arr.entries();

while(pos){

var result = Iteartor.next();
if(result.done !== true){ //當循環到最后一個的時候result.done會變成true

result.value[1].sort((a,b)=>a-b);

}else{

pos = false;
}

}

}

sortArr(arr);

我們再來看一個

var arr = ['a','b','c'];
var iteartor = arr.entries();

for(let i of iteartor){
console.log(i);
}

//[0, "a"]
//[1, "b"]
//[2, "c"]

for .. of循環能遍歷迭代器對象 //具體我放在以后的文章好好講講

4.Array.from
用法:可以將一個類似數組或者可迭代對象創建一個新的數組(不會改變原數組)
先舉一個小例子

Array.from('abc'); //=>['a','b','c']
Array.from({0:'a',1:'b',length:2}) //=> ['a','b']

接下來我們再來看一個神奇的例子,一行代碼將數組中的元素去重

Array.from(new Set([4,2,4,2,6,6,7,8])); //=>[4,2,6,7,8] 

5.every
every(callback[,thisArg])
用法:用來測試數組中是否每個元素都滿足某種規則
測試函數參數:(value, index, arr) 分別是該數組的值,該數組的索引還有該數組
返回值:Boolean true或者false

var arr = [1,3,5,12,50,6];
var flag = arr.every(chenckIsBig);
function chenckIsBig(ele,index,arr){
return ele<20;
}
console.log(flag) //=>false

6.some
some(callback[,thisArg])
用法:用來測試數組中是否有元素都滿足某種規則
測試函數參數:(value, index, arr) 分別是該數組的值,該數組的索引還有該數組
返回值:Boolean true或者false

var arr = [1,3,5,12,50,6];
var flag = arr.some(chenckIsBig);
function chenckIsBig(ele,index,arr){
return ele<20;
}
console.log(flag) //=>true

7.filter
filter(callback[,thisArg])
用法:用于創建一個新數組,滿足通過參數函數測試的所有函數
測試函數參數:(value, index, arr) 分別是該數組的值,該數組的索引還有該數組
返回值:返回一個新數組
先看一個小例子

const checkIsBigEnough = (value) => value >= 10
let arr = [6,12,50,77,95];
console.log(arr.filter(checkIsBigEnough)); //=> [12,50,77,95]

ok,我再給大家舉一個我經常用的例子,有的時候我們通過ajax獲取后臺穿過來的json數據,但是其實不是所有數據我們都能用的,這個時候filter的就顯得比較重要了,還是看例子

//我從后臺獲取了一個數組,數組中包含多個對象如下:
let json = [
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "336", "FromStation": "北京"},
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "336", "FromStation": "北京"},
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "336", "FromStation": "北京"},
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "336", "FromStation": "北京"},
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "336", "FromStation": "北京"}
]
//這個時候我只需要獲取FromStation值為北京的對象,這個時候filter就派上用場了
let filterMethod = (value) => value.FromStation == "北京"
let finallyData = json.filter(filterMethod);
console.log(finallyData);
//=> [{"CostTime": "336", "FromStation": "北京"},{"CostTime": "336", "FromStation": "北京"},{"CostTime": "336", "FromStation": "北京"},{"CostTime": "336", "FromStation": "北京"},{"CostTime": "336", "FromStation": "北京"}]

8.find
find(callback[,thisArg])
用法:和上面幾個是幾兄弟,用法和filter相似,不過find返回值是符合測試函數的第一個值
測試函數參數:(value, index, arr) 分別是該數組的值,該數組的索引還有該數組
返回值:符合測試函數的第一個數組的值,如果沒有符合條件的返回Undefined


let json = [
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "336", "FromStation": "北京"},
{"CostTime": "340", "FromStation": "杭州"},
]

let checkMethod = (value) => value.CostTime == "340"

console.log(json.find(checkMethod)); //=>{"CostTime": "340", "FromStation": "杭州"}

9.findIndex
用法:和上面幾個是幾兄弟,用法和find相似,不過findIndex返回值是符合測試函數的第一個值的索引
測試函數參數:(value, index, arr) 分別是該數組的值,該數組的索引還有該數組
返回值:符合測試函數的第一個數組的值,如果沒有符合條件的返回-1

let json = [
{"CostTime": "310", "FromStation": "上海"},
{"CostTime": "336", "FromStation": "北京"},
{"CostTime": "340", "FromStation": "杭州"},
]

let checkMethod = (value) => value.CostTime == "340"
let checkMethod2 = (value) => value.FromStation == "深圳"

console.log(json.findIndex(checkMethod)); //=>2

console.log(json.findIndex(checkMethod2)); //=> -1

10.fill
arr.fill(value)
arr.fill(value, start)
arr.fill(value, start, end)

用法:用一個固定的值去填充數組中從其實索引到終止索引內的全部元素
參數:
value(必填)用來填充數組的值
start(選填)起始索引,默認值為0 如果為負數的話start = start+arr.length
end (選填)終止索引,默認值為arr.length 如果為負數的話 end = end+arr.length
start=>end 在數學中是[),選擇大于等于start,小于end的值
返回值:修改之后的數組

[1,2,3].fill(5) //=> [5,5,5] 不傳start默認為0,不傳end默認為arr.length
[1,2,3].fill(5,1) //=>[1,5,5]
[1,2,3].fill(5,1,2) //=>[1,5,3]
[1,2,3].fill(5,1,1) //=>[1,2,3] 不變因為大于等于1小于1的值沒有
[1,2,3].fill(5,-3,-2) //=>[5,2,3] start = -3 => -3+3 = 0 end = -2 =>-2 + 3 = 1 =>fill(5,0,1)
Array(3).fill(5) //=> [5,5,5] 這個方法比較有用,可以初始化數組(將所有值初始化為一個值)

11.indexOf
arr.indexOf(searchElement,formIndex)
參數:
searchElement要查找的元素
formIndex從哪開始查找 (formIndex為一個整數,可以為負數,當formIndex為負數的時候formIndex可以轉化成formIndex+arr.length 如果還為負數的話表示查找整個元素)
返回值:-1(沒有找到元素) 或者 元素的下標(找到元素)

// 找出指定元素在數組中出現的位置
var positionIndex = [];
var arr = [1,5,6,1,7,8,1,6,6,6];
var pos = arr.indexOf(1);
while(pos!=-1){
positionIndex.push(pos);
pos = arr.indexOf(1,pos+1);
}
console.log(positionIndex); // => [0,3,6]

12.reduce
用法:方法對累加器和數組中的每個元素(從左到右)應用一個函數,將其減少為單個值。(這個是mdn文檔上寫的,看起來感覺特別難懂,其實他就是一個將數組元素不斷遞歸執行一個函數之后返回的值)
我們還是先看例子:

//數組累加
var arr = [3,6,5,1];
arr.reduce((pre,cur)=>pre+cur,10) //10+3+6+5+1 => 25

//數組累乘
var arr = [3,6,5,1];
arr.reduce((pre,cur) => pre*cur) //3*6*5*1 =>90

ok,我們先來看看reduce函數
reduce((preValue,curValue,index,array)=>{},initialValue)
我們先看回調函數中的值:
preValue: 上一次調用回調返回的值,或者是提供的初始值(initialValue)著作權歸作者所有。
curValue: 數組中當前被處理的數組項
index: 當前數組項在數組中的索引值
array: 調用 reduce()方法的數組
我們寫一個demo來看看這個方法是如果實行的

let arr = [1,2,3,4,5,6,7];
arr.reduce((pre,cur)=>{
console.log(pre,cur);
return pre+cur;
})
/*
1,2
3,3
6,4
10,5
15,6
21,7
28
*/

arr.reduce((pre,cur)=>{
console.log(pre,cur);
return pre+cur;
},10)
/*
10,1
11,2
13,3
16,4
20,5
25,6
31,7
38
*/

由此可以看出:

  1. 在initialValue沒有傳入的時候
    pre在第一次循環的時候為數組第一個數
    cur為數組第二個值

  2. 在initialValue有值的時候
    在第一次循環pre初始為initialValue
    cur為數組第一個值

其實reduce以遞歸的思想可以理解為:
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
再舉一個reduce的常用例子吧,二維數組的合并

var twoArr = [['a','b'],['c','d'],['e','f']];
twoArr.reduce((pre,cur)=>{
return pre.concat(cur)
},[])
//=> a,b,c,d,e,f

13.reduceRight
用法其實和reduce基本沒有區別,唯一的區別是他是從右到左執行回調函數

var twoArr = [['a','b'],['c','d'],['e','f']];
twoArr.reduceRight((pre,cur)=>{
return pre.concat(cur)
},[])
//=> f,e,d,c,b,a

let arr = [1,2,3,4,5,6];
arr.slice(0,2); // =>[1,2]
arr.slice(-1) // =>[6]
arr.slice(0) // => [1,2,3,4,5,6]
arr.slice(-7) //=> [1,2,3,4,5,6]
arr.slice(2,-3) // => [3]

字符串方法和數組方法相似
let str = 'I am Bob';
str.slice(-5); //=> m Bob
str.slice(0,6); //=> I am B

數組方法之splice
splice(start,deleteCount,item...)
用法:萬精油方法,可以對數組進行增加,刪除,插入,可以從數組中移除一個或者多個元素,并且用后面的item來替換它,返回值為刪除的元素的數組,并且改方法會改變原數組
let arr = [1,2,3,4,5,6];
arr.splice(0,5); [1,2,3,4,5]返回一個唄刪除的數組
console.log(arr); // =>[6]
arr.splice(0,0,7,8,9); //返回一個空數組[]
arr // =>[7,8,9,6]

數組的遍歷

let arr = [1,2,3,4];
//普通for循環
for(var i = 0,length=arr.length;i < length;i++){
//do someThing
}

//forEach循環
arr.forEach((value, index)=>{
//do someThing
})

//map循環
arr.map((value, index)=>{
//do someThing
})

//其實還有兩個循環一個for in ,還有一個是for of,不過強烈介意不要用for in,一個是效率比普通for循環差好多,因為它會遍歷整個數組的原型對象,我們來看一個例子
//我們給數組原型添加一個haha的方法
Array.prototype.haha = function(){
//do somthing
}
//然后我們再用for in來

輸出數組
for(let i in arr){
console.log(arr[i]);
}
//=> 1,2,3,4 haha
最后竟然輸出了haha,這是因為for in這個循環會遍歷數組的原型對象,所以會輸出haha,那么要解決這個有方法么?其實也有:
for(let i in arr){
if(arr.hasOwnProperty(i))
console.log(arr[i]);
}
//可以看到遍歷輸出了正確的值,但是還是不建議大家使用for in去循環數組,不單單是效率低,而且容易出問題,特別是當項目引用了許多第三方類庫的時候。
有大牛做過一個測速,遍歷數組的時間對比 for in > map > forEach > for

數組元素的添加和刪除

  1. push 將一個或者多個數組添加到數組的末尾,并且返回數組的長度
    Array.prototype.push(ele1,ele2,ele3,ele4)

  2. pop 刪除數組的最后一個值,并且返回刪除元素的值
    Array.prototype.pop()

  3. shift刪除數組第一個值,并且返回刪除元素的值,用法和pop相似
    Array.prototype.shift()

  4. unshift 用法和push相似,將一個或者多個元素添加到數組的開頭,并且返回數組的長度

    Array.prototype.unshift(ele1,ele2,ele3,ele4)

數組和字符串之間的相互轉化

  1. 數組轉化成字符串
    join:首先join方法不會改變原數組,只會返回一個生成的新字符串

let a = ['a','b','c'];

console.log(a.join()) //=> 'a,b,c'
console.log(a.join("")) //=> 'abc'
console.log(a.join('-')) //=> 'a-b-c'

ok,這個比較簡單,我們在來看一個復雜點的,類數組轉化成字符串

function f(a,b,c){
let e = Array.prototype.join.call(arguments,"");
console.log(e);
}
f('Hello',' ','World'); //=> Hello World
  1. 字符串轉化成數組

用字符串的split方法,具體先不多說,等寫字符串方法全解析的時候再進行具體說明。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

全面解析Javascript數組方法

全面解析Javascript數組方法:本文主要和大家分享Javascript數組方法,希望能幫助大家更加理解Javascript數組。Javascript 數組方法全解析(包含es6)1. 數組自帶屬性 constructor //返回創建數組對象的原型函數 length //返回數組對象的長度 prototype //這個是老熟人了,可
推薦度:
標簽: 方法 js 解析
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 精品一区二区三区四区五区 | 欧美日韩国产综合视频在线看 | 日韩欧美亚洲视频 | 亚洲伊人色 | 亚洲欧美色图 | 国产高清不卡码一区二区三区 | 亚洲色图第四页 | 午夜大片在线观看 | 精品国产一区二区三区成人 | 日本久久香蕉一本一道 | 亚洲成a人一区二区三区 | 欧美综合图区亚洲综合图区 | 四虎影院永久免费观看 | 日韩成人在线视频 | 国产精品高清视亚洲一区二区 | 国产高清在线播放免费观看 | 欧美精品一区二区三区久久 | 最新国产区 | 素人面接| 欧美成人免费xxx大片 | 国产精品亚洲国产三区 | 久久免费精品国产72精品剧情 | 日本国产最新一区二区三区 | 91po国产在线精品免费观看 | 毛片福利 | 久久成人国产精品免费 | 精品国产3p一区二区三区 | 国产精品免费视频播放 | 国产在线观看入口 | 色在线免费视频 | 国产不卡在线 | 久久er | 成人免费大片a毛片 | 一边摸一边爽一边叫床视频 | 亚洲欧美日韩中文字幕在线 | 在线不欧美 | 国产va在线视频观看 | 日韩欧美91 | 欧美激情在线精品三区 | 国产精品资源在线播放 | 亚洲欧美激情在线 |