1. 程式人生 > 其它 >javascript常用陣列API

javascript常用陣列API

陣列 API

1 . 插入 / 刪除

arr.push(value1,[value2,value3]);  // 在陣列末尾追加元素 (1)修改原陣列 (2)返回新陣列的length (3)追加進去的陣列不會被打散
arr.pop(); // 刪除陣列末尾元素   (1)修改原陣列 (2)返回被刪除的元素

arr.unshift(value1, value2......); // 在陣列開頭插入元素 (1)修改原陣列 (2)返回新陣列的length
arr.shift(); // 在陣列開頭刪除元素 (1)修改原陣列  (2)返回被刪除的元素

2 . 轉字串 ( 4 )

String(arr);  
arr.toString();  // 將陣列中的元素用逗號連線成字串

arr.join("連線符");  // 用連線符把數組裡面的元素連線成字串  (1)arr.join("")能無縫連線

arr.toLocaleString();  // 將陣列轉換為本地化字串。它首先呼叫所有陣列元素的 toLocaleString() 方法,然後使用地區特定的分隔字元將結果字串連線起來。

3. 拼接

// (1)不會修改原陣列,返回新陣列;  (2)如果傳給 concat() 的某個引數本身是一個數組,則會將該陣列的元素銜接到 arr 中,而不是陣列本身
arr.concat("a","b",arr1);  

var arr = [1,2,3];
arr.concat([4,5]); // [1,2,3,4,5]
arr.concat(4, [5, [6, 7]); // [1,2,3,4,5,[6,7]];

4. slice / splice

arr.slice(begin,end]); // 擷取陣列  (1)不會修改原陣列 (2)返回新的子陣列包含begin索引,不包括end索引元素
					 // (3)省略第二個引數表示從begin位置開始一直擷取到末尾 (4)索引可以取負,對應加上陣列長度的元素

arr.splice();   // 刪除、插入、替換  (1)會影響原陣列
arr.splice(開始刪除的索引,刪除的個數);  				  // 刪除  (2)返回被刪除項組成的新陣列
arr.splice(插入項在新陣列中的索引,0,一個或多個插入項);     // 插入  (2)返回空陣列
arr.splice(開始刪除的索引,刪除的個數,一個或多個插入項);	   // 替換  (2)返回被刪除項組成的新陣列,插入項會接在被刪除項位置

5. 翻轉 / 排序

arr.reverse();  // 翻轉陣列  (1)直接修改原陣列

arr.sort();  // 陣列排序  (1)直接修改原陣列   (2)預設按照陣列元素第一位的ASCII碼從小到大排列
// 升序(只限陣列中是數字或者數字字串)
arr.sort(function(a,b){
    // 返回值大於0,ab進行交換;<=0,保持位置不變
	return a-b;  // b-a 降序
});
// 隨機打亂陣列(陣列中可以是任何資料型別)
arr.sort(function(){
    return Math.random()>.5 ? 1 : -1; 
});

6. 查詢

arr.indexOf(value); // 查詢給定元素在陣列中的第一個索引,沒有則返回-1
arr.lastIndexOf(value); // 查詢給定元素在陣列中的最後一個索引,沒有則返回-1
arr.includes(value);  // 表示某個值是否在數組裡,不接受函式引數, 返回true或false


arr.find(fn()); // 找出第一個符合條件的陣列成員,沒找到返回 undefined
const persons = [
    {id: 1, name: 'Jim', age: 22},
    {id: 2, name: 'Alen', age: 17},
    {id: 3, name: 'Lily', age: 20}
]
let a = persons.find(person => {
    return person.id === 2;
});
console.log(a) // {id: 2, name: 'Alen', age: 17}


arr.findIndex(fn()); // 找出第一個符合條件的陣列成員的位置,沒找到返回 -1
const persons = [
    {id: 1, name: 'Jim', age: 22},
    {id: 2, name: 'Alen', age: 17},
    {id: 3, name: 'Lily', age: 20}
]
let a = persons.findIndex(person => {
    return person.id === 2;
});
console.log(a) // 1

7. 遍歷

// (item 每一個子項,index 索引,arr 原陣列) 修不修改原陣列取決於匿名函式中對原陣列處理與否
// 以下API的匿名函式中thsi指向window,當然我們可以使用箭頭函式進行修改

// 純遍歷
arr.forEach(function(item,index,arr){}); // forEach 匿名函式中的return 用於中止單次迴圈,整體並沒有返回值(undefined)
arr.map(function(item,index,arr){}); // map 會建立一個新的陣列,陣列取自匿名函式中return的每一項


// 可中斷遍歷
arr.some(function(item,index,arr){});  // 只要return true 就退出迴圈 (判斷是否存在元素符合條件)
arr.every(function(item,index,arr){});  // 只要return false 就退出迴圈 (判斷是存在否不符合條件元素)


// 過濾
arr.filter(function(item,index,arr){});  // 按條件過濾,返回過濾後的陣列

8. 歸併

// 歸併: 當前項的值作為引數給下一項使用
// (preValue:上一次呼叫返回的值/初始值,curValue:被處理的當前項,index:當前項的索引,array:原陣列)
// initValue 初始值,當不指定初始值時,它將使用陣列的第一個元素作為初始值。
// 因此,當不選定初始值時,index從1開始;傳入初始值 index 才會從0開始
reduce(function(preValue,curValue,index,array){},initValue);
reduceRight(function(preValue,curValue,index,array){},initValue); // 陣列從右向左開始歸併,用法同理