Array.find((item,indexArr,arr)=>{}) 掌握
找出第一個符合條件的陣列成員,
它的引數是一個回呼函式,對所有陣列成員依次執行該回呼函式,
直到找出第一個回傳值為true的成員,然后回傳該成員,
如果沒有符合條件的成員,則回傳undefined,
-- 找出第一個大于15的數字
let arr = [10, 20, 30]
let firstItem = arr.find((item, index, Arr) => {
return item > 15
})
console.log('firstItem==>', firstItem); //輸出20
-- 找出第一個大于19的數字的這一項的值
let arr = [{
age: 10
}, {
age: 20
}, {
age: 30
}]
let firstItem = arr.find((item, index, Arr) => {
return item.age > 19
})
console.log('firstItem==>', firstItem); //輸出{age: 20}
Array.findIndex((item, index, Arr) => {}) 掌握
陣列實體的 findIndex 方法的用法與find方法非常類似,
回傳第一個符合條件的陣列成員的位置,如果所有成員都不符合條件,則回傳-1,
let arr = [{
age: 10
}, {
age: 20
}, {
age: 30
}]
let a = arr.findIndex((item, index, Arr) => {
return item.age > 15
})
let b = arr.findIndex((item, index, Arr) => {
return item.age > 45
})
console.log('a==>', a); //輸出1
console.log('b==>', b); //輸出-1
//查找陣列的某一項是否有某個值
//回傳第一個符合條件的陣列成員的位置
const arr = [{
id: 001
}, {
id: 002
}, {
id: 003
}];
let index = arr.findIndex(item => {
return item.id == '004'
})
console.log(index);
Array.flat()用于拉平嵌套的陣列[推薦-超級好用]
陣列的成員有時還是陣列,Array.flat()用于將嵌套的陣列“拉平”,變成一維的陣列,
該方法回傳一個新陣列,對原資料沒有影響,
[1, 2, [3, 4]].flat() 讀音【fu la t】
flat()默認只會“拉平”一層,如果想要“拉平”多層的嵌套陣列,
可以將flat()方法的引數寫成一個整數,表示想要拉平的層數,默認為1,
[1, 2, [3, [4, 5]]].flat()
上面代碼中,表示想要拉平的層數,默認為1
// [1, 2, 3, [4, 5]]
[1, 2, [3, [4, 5]]].flat(2)
上面代碼中,flat()的引數為2,表示要“拉平”兩層的嵌套陣列,
// [1, 2, 3, 4, 5]
如果不管有多少層嵌套,都要轉成一維陣列,可以用Infinity關鍵字作為引數,
[1, [2, [3]]].flat(Infinity)
// [1, 2, 3]
如果原陣列有空位,flat()方法會跳過空位,
[1, 2, , 4, 5].flat()
// [1, 2, 4, 5]
Array.at()回傳對應下標的值[超級好用]
我們都知道JavaScript不支持陣列索引值為負索引,
那么想要表示陣列的最后一個成員,不能寫成arr[-1],只能使用arr[arr.length - 1],
為了解決負索引這個問題,es6中為陣列實體增加了at()方法,接受一個整數作為引數,
回傳對應位置的成員,支持負索引,
這個方法不僅可用于陣列, 也可用于字串和型別陣列( TypedArray),
如果引數位置超出了陣列范圍,at()回傳undefined,
const arr = [100, 120, 18, 130, 4];
console.log(arr.at(1)) //120
console.log(arr.at(-1)) //4
console.log(arr.at(-5)) //100
console.log(arr.at(-6)) //undefined
Array.from() [掌握]
一個類似陣列的物件,Array.from將它轉為真正的陣列,
需要注意的是:這個類似陣列的物件必須要有length屬性才可以,轉為陣列,
否者將會轉為為一個空陣列
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
length: 3
};
// ES5的寫法
var arr1 = [].slice.call(arrayLike); // ['a', 'b', 'c']
// ES6的寫法
let arr2 = Array.from(arrayLike); // ['a', 'b', 'c']
當沒有類似陣列的物件沒有length屬性
let arrayLike = {
'0': 'a',
'1': 'b',
'2': 'c',
};
//此時回傳的是一個空陣列
let arr2 = Array.from(arrayLike); // []
Array.of() 了解
Array.of()方法用于將【一組數值】轉換為陣列.
簡單的使用:
const a = Array.of(10, 20, 26, 38);
console.log(a); // [10, 20, 26, 38]
const b = Array.of(1).length;
console.log(b); // 1
Array.of()可以用以下的代碼模擬實作:
function ArrayOf() {
return [].slice.call(arguments);
}
Array.includes的使用
Array.prototype.includes方法回傳一個布林值,表示某個陣列是否包含給定的值,
與字串的includes方法類似,ES2016 引入了該方法,
簡單的使用方法
const arr = [100, 200, 300];
console.log(arr.includes('100')) //false
console.log(arr.includes(100)) //true
沒有該方法之前,我們使用陣列的indexOf方法,檢查是否包含某個值,
if (arr.indexOf(el) !== -1) {
// 有這個值
}
indexOf方法有兩個缺點,一是不夠語意化,它的含義是找到引數值的第一個出現位置,
所以要去比較是否不等于-1,表達起來不夠直觀,
二是,它內部使用嚴格相等運算子(===)進行判斷,這會導致對NaN的誤判,
[NaN].indexOf(NaN) // -1
includes使用的是不一樣的判斷演算法,所以沒有這個問題,
[NaN].includes(NaN)
// true
擴展運算子 (...)
擴展運算子是三個點(...),
將一個陣列轉為用逗號分隔的引數序列,
console.log(...[1, 2, 3])
// 1 2 3
console.log(1, ...[2, 3, 4], 5)
// 1 2 3 4 5
[...document.querySelectorAll('div')]
// [<div>, <div>, <div>]
let arr1=[11,22,];
let arr2=["aa","bb"];
// es5的合并
let arr=arr1.concat(arr2);
console.log(arr) // [11, 22, "aa", "bb"]
//es6
let newarr=[...arr1,...arr2]
console.log(newarr) // [11, 22, 33, 55, "aa", "bb", "cc", "dd"]
// 函式內部有一個物件,arguments可以獲取到實參,但是一個偽陣列
//Array[餓 rei]
function sun(){
console.log(arguments)
//Arguments(8) [1, 2, 3, 4, 5, 6, 7, 9, callee: ?, Symbol(Symbol.iterator): ?] 他是一個偽陣列
}
sun(1,2,3,4,5,6,7,9);
// 如何將函式內部的偽陣列變為真實的陣列 方法1
function sun(){
let ags=Array.prototype.slice.call(arguments);
ags.push(150);
console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);
// 如何將函式內部的偽陣列變為真實的陣列 方法2
function sun(){
let ags=[...arguments];//將偽陣列百年未真實的陣列
ags.push(150);
console.log(ags); //[1, 2, 3, 4, 5, 6, 7, 9, 150]
}
sun(1,2,3,4,5,6,7,9);
// 總結擴展運算子是... [...變為真實陣列的物件]
陣列的空位
陣列的空位指的是,陣列的某一個位置沒有任何值.
比如Array()建構式回傳的陣列都是空位,
let arr = new Array(3)
console.log(arr); // [, , ,] 谷歌瀏覽器中會有出現 [空屬性 × 3]
上面代碼中,Array(3)回傳一個具有 3 個空位的陣列,
ES5 對空位的處理,已經很不一致了,大多數情況下會忽略空位,
forEach(), filter(), reduce(), every() 和some()都會跳過空位,
map()會跳過空位,但會保留這個值
join()和toString()會將空位視為undefined,而undefined和null會被處理成空字串,
ps:ES6 則是明確將空位轉為undefined,
let arr = new Array(3)
console.log(arr[0] === undefined); //true
ps:ES6 則是明確將空位轉為undefined,
Array.from()方法會將陣列的空位,轉為undefined,也就是說,這個方法不會忽略空位,
Array.from(['a',,'b'])
// [ "a", undefined, "b" ]
擴展運算子(...)也會將空位轉為undefined,
[...['a',,'b']]
// [ "a", undefined, "b" ]
new Array(3).fill('a') // ["a","a","a"]
for...of回圈也會遍歷空位,
let arr = [, ,];
for (let i of arr) {
console.log(1);
}
// 1
// 1
上面代碼中,陣列arr有兩個空位,for...of并沒有忽略它們,
如果改成map()方法遍歷,空位是會跳過的
遇見問題,這是你成長的機會,如果你能夠解決,這就是識訓,
作者:明月人倚樓出處:https://www.cnblogs.com/IwishIcould/
想問問題,打賞了卑微的博主,求求你備注一下的扣扣或者微信;這樣我好聯系你;(っ??ω??)っ???!
如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,或者關注博主,在此感謝!
萬水千山總是情,打賞5毛買辣條行不行,所以如果你心情還比較高興,也是可以掃碼打賞博主(っ??ω??)っ???!
想問問題,打賞了卑微的博主,求求你備注一下的扣扣或者微信;這樣我好聯系你;(っ??ω??)っ???!
支付寶
微信
本文著作權歸作者所有,歡迎轉載,未經作者同意須保留此段宣告,在文章頁面明顯位置給出原文連接 如果文中有什么錯誤,歡迎指出,以免更多的人被誤導,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/450400.html
標籤:JavaScript
