????時(shí)隔一個(gè)月竣稽,一直在忙囱怕,今天就抽空總結(jié)下js中操作數(shù)組的方法霍弹。最后幾條是重點(diǎn)!
1娃弓、鎖定數(shù)組的長(zhǎng)度 Object.defineProperty方法(讓數(shù)組的長(zhǎng)度變成只讀)典格。
??這個(gè)屬性方法是Vue的核心方法,今天就放在第一個(gè)了解台丛,他可以使數(shù)組長(zhǎng)度只讀耍缴,數(shù)組內(nèi)容可以修改,但是如果方法改變數(shù)組長(zhǎng)度,例如push挽霉,pop等防嗡,就會(huì)報(bào):Cannot assign to read only property 'length' of object '[object Array]' [](javascript:;)無(wú)法分配對(duì)象“對(duì)象數(shù)組”的只讀屬性“長(zhǎng)度”
這個(gè)錯(cuò)誤。
var a = [1,2,3] //定義一個(gè)數(shù)組
Object.defineProperty(a,"length",{
writable:false
}) //將a數(shù)組的長(zhǎng)度屬性設(shè)為只讀
a.length = 0 //將a的長(zhǎng)度改為0
console.log(a.length); //打印a數(shù)組的長(zhǎng)度侠坎,還是3
2蚁趁、Array.join()方法,返回一個(gè)字符串
??和分割字符串split方法很像实胸,和String的split()方法是一個(gè)相反的操作他嫡。join方法可以把數(shù)組中的所有元素放入一個(gè)字符串,并且不改變?cè)瓟?shù)組童芹。join("#")括號(hào)里面#可以寫任意字符涮瞻,作為分割符。
var a = [1,2,3];
var b = a.join("");
var c = a.join("##");
console.log(a); //[1, 2, 3],原數(shù)組不改變
console.log(b); //"123",變成字符串
console.log(c); //"1##2##3",變成字符串
3假褪、Array.reverse()方法署咽,返回逆序數(shù)組
var a = ['我','是','中','國(guó)','人'];
a.reverse();
console.log(a); //直接改變a數(shù)組的值 返回的是["人", "國(guó)", "中", "是", "我"];
4、Array.sort()方法生音,返回排序后的數(shù)組宁否。如果數(shù)組包含undefined,會(huì)被排到數(shù)組的尾部缀遍。如果不帶參數(shù)的調(diào)用sort()慕匠,數(shù)組元素以字母表順序排序
// 從大到小
var a = [2,33,1111,444];
a.sort()
console.log(a); //返回的結(jié)果是[1111, 2, 33, 444]
// 從小到大
var a = [2,33,1111,444];
a.sort(function (a,b) {
return a-b
})
console.log(a); //[2, 33, 444, 1111]
5、Array.concat()連接兩個(gè)數(shù)組,創(chuàng)建并返回一個(gè)新數(shù)組
var a = [1,2,3];
var b = a.concat(4,5);
var c = a.concat([4,5]);
console.log(a); //返回的還是[1,2,3]
console.log(b); //返回[1,2,3,4,5]
console.log(c); //返回[1,2,3,4,5]
6域醇、Array.slice()方法台谊,返回指定數(shù)組的片段或者子數(shù)組,不會(huì)改變?cè)瓟?shù)組
var a = [1,2,3,4,5];
a.slice(0,3); //返回[1,2,3] 第一個(gè)參數(shù)是截取開始的位置(包括)譬挚,第二個(gè)參數(shù)是截取結(jié)束的位置(不包括)
a.slice(3); //返回[4,5]
a.slice(1,-1); //返回[2,3,4] 負(fù)數(shù)表示倒數(shù)
console.log(a); //返回[1,2,3,4,5]
7锅铅、Array.splice()方法,用來(lái)刪除或插入元素减宣,會(huì)修改原數(shù)組
var a = [1,2,3,4,5,6,7,8];
var b = a.splice(1,2); //第一個(gè)參數(shù)是截取的起始位置(包括)盐须,第二個(gè)參數(shù)是截取的個(gè)數(shù),之后的參數(shù)就是添加在元數(shù)組的新值
console.log(a); //返回[1, 4, 5, 6, 7, 8]
console.log(b); //返回[2, 3]
8漆腌、push()方法與pop()方法
??push()方法在數(shù)組的尾部添加一個(gè)或者多個(gè)元素贼邓,并返回?cái)?shù)組的新長(zhǎng)度阶冈。注意的是,改變的是原數(shù)組的值塑径,返回的是新數(shù)組的長(zhǎng)度女坑。
??pop()方法刪除數(shù)組的最后一個(gè)元素,并返回它的刪除值晓勇。也是改變?cè)瓟?shù)組堂飞,返回的是刪除的值。
9绑咱、unshift()方法與shift()方法
??unshift()方法類似于push()不同的是绰筛,他是在數(shù)組頭部添加,其他都一樣
??shift()移除數(shù)組中的第一項(xiàng)并返回該項(xiàng)描融。
10铝噩、toString()和toLocaleString()
toString()方法將每個(gè)元素轉(zhuǎn)化為字符串,類似于不傳參的join()方法窿克。
toLocaleString()方法是toString()的本地化版本骏庸。
11、filter(過(guò)濾年叮,返回符合條件過(guò)濾后的數(shù)組)
var a = [1,2,3,4,5];
var b = a.filter(function (value) {
return value > 3
})
console.log(b); //返回[4,5]
12具被、map (返回操作后的數(shù)組,和forEach()類似)
var a = [1,2,3,4,5];
var b = a.map(function (value) {
return value+1
})
console.log(b); //返回[2,3,4,5,6]
13只损、includes (判斷數(shù)組中是否有某個(gè)值一姿,返回布爾)
var a = [1,2,3,4,5];
console.log(a.includes(1)) // true
14、find (找到某個(gè)值跃惫,返回的是找到的值)
/**
array.find(function(currentValue, index, arr),thisValue)
currentValue 必需叮叹。當(dāng)前元素
index 可選。當(dāng)前元素的索引值
arr 可選爆存。當(dāng)前元素所屬的數(shù)組對(duì)象
thisValue 可選蛉顽。 傳遞給函數(shù)的值一般用 "this" 值。
如果這個(gè)參數(shù)為空先较,“undefined”會(huì)傳給“this”值
*/
var a = [1,2,3,4,5];
a.find(function(val){
console.log(val>3)
})
15携冤、every (判斷數(shù)組是否都符合條件,返回布爾)
只有數(shù)組中所有元素都滿足某個(gè)條件才會(huì)返回true闲勺;
var a = [1,2,3,4,5];
a.every(function (value) {
return value < 10
}) //true
16噪叙、some (找到某個(gè)值返回布爾)
只要有滿足條件的值,就返回true霉翔。
var a = [1,2,3,4,5];
a.every(function (value) {
return value % 2 === 0
}) //false
17、reduce (參數(shù):prev苞笨,next债朵,index子眶,arr原數(shù)組)常用于數(shù)組求和
callback (執(zhí)行數(shù)組中每個(gè)值的函數(shù),包含四個(gè)參數(shù))
1序芦、previousValue (上一次調(diào)用回調(diào)返回的值臭杰,或者是提供的初始值(initialValue))
2、currentValue (數(shù)組中當(dāng)前被處理的元素)
3谚中、index (當(dāng)前元素在數(shù)組中的索引)
4渴杆、array (調(diào)用 reduce 的數(shù)組)
initialValue (作為第一次調(diào)用 callback 的第一個(gè)參數(shù)。)
// 計(jì)算商品中價(jià)格
let sum1 = [{price:30,count:2},{price:40,count:3},{price:30,count:4}].reduce(function(prev, next) {
return prev+next.price*next.count
},0) // 默認(rèn)指定第一次的prev
console.log(sum1) // 300
// 將多維數(shù)組轉(zhuǎn)化為一維數(shù)組
let flat = [[1,2,3],[4,5,6],[7,8,9]].reduce(function(prev, next){
return prev.concat(next);
})
console.log(flat) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
就總結(jié)到這里了宪塔。