1:實(shí)現(xiàn)深拷貝的方法
如果參數(shù)是一個(gè)真正的數(shù)組姿锭,Array.from()會(huì)返回一個(gè)一模一樣的新數(shù)組频轿。
let a = [1,2,3]
let b = Array.from(a)
b[0] = 4 // b:[4,2,3] a:[1,2,3]
理解:Array.from復(fù)制數(shù)組修改新數(shù)組不會(huì)更改原數(shù)組,同樣效果的還有如下寫(xiě)法都不會(huì)改變?cè)瓟?shù)組
let a = [1,2,3]
//方法一:擴(kuò)展運(yùn)算符
let [...b] = a
b[0] = 4 // b:[4,2,3] a:[1,2,3]
//方法二:JSON.parse和JSON.stringify
let b=JSON.parse(JSON.stringify(a))
b[0] = 4 // b:[4,2,3] a:[1,2,3]
2:關(guān)于數(shù)組的一些處理方法的應(yīng)用
1堰酿、Object.assign()(這其實(shí)是對(duì)象的方法徒像,但是可以用來(lái)處理數(shù)組,不過(guò)會(huì)把數(shù)組視為對(duì)象)
下面的方法可以用于替換覆蓋有相同屬性的兩個(gè)數(shù)組笨枯,c是被改變的數(shù)組薪丁,a是數(shù)據(jù)源
let a=[{a:1},{b:2}]
let c=[{a:3},{b:4},{d:5}]
Object.assign(c, a) //c: [{a:1},{b:2},{d:5}]
2:將字符串轉(zhuǎn)化為單個(gè)字符組成的數(shù)組的方法
例:let hello => ['h','e','l','l','o']
{...'hello'} //方法一:擴(kuò)展運(yùn)算符
Object.values('hello') // 方法二:Object.values (返回一個(gè)數(shù)組,成員是參數(shù)對(duì)象自身的(不含繼承的)所有可遍歷(enumerable)屬性的鍵值)
3:數(shù)組去重的es6方法馅精,Array.from()和 Set 結(jié)構(gòu)相結(jié)合
(to myself:其他的數(shù)組去重方法后面單獨(dú)開(kāi)一個(gè)文章總結(jié)严嗜,別偷懶)
// 以上兩種方法都用了Set結(jié)構(gòu)成員的值都是唯一的這一特性,本質(zhì)上是Set結(jié)構(gòu)進(jìn)行的去重的工作洲敢,而Array.from()和擴(kuò)展運(yùn)算符只是將返回的結(jié)果轉(zhuǎn)化成數(shù)組而已
function dedupe(array) {
return Array.from(new Set(array)); //方法一返回一個(gè)Array.from()包含的set
return [...new Set(array)] // 方法二阻问,用擴(kuò)展運(yùn)算符
}
dedupe([1, 1, 2, 3]) // [1, 2, 3]
reduce數(shù)組去重(圖片為reduce的語(yǔ)法)
1.png
let arr4 = [1,3,2,5,3,1,2,7,8];
let newArr = arr4.reduce((pre,cur)=>{
/*
1
1,3
1,3,2
1,3,2,5(打印四次)
1,3,2,5,7
undefined
*/
console.log(`${pre}`)
if(!pre.includes(cur)){
return pre.concat(cur)
} else {
return pre
}
},[]);