1. 程式人生 > 其它 >常用的Array方法(持續更新)

常用的Array方法(持續更新)

技術標籤:jsjavascript

在js中陣列的方法有很多,作為一個新手自己整理了我們常用到的一些方法

陣列去重

Array.from(new Set(arr))

轉化字串

var a = [1,2,3,4]
console.log(a.join()); // "1,2,3,4"
console.log(a.join(""); // "1234"
console.log(a.join(" ")); // "1 2 3 4"
console.log(a.join("-")); // "1-2-3-4"

陣列求和

  • 方法一
function sum(arr) {
    var s = 0;
    arr.forEach(function(val, idx, arr) {s += val;}, 0);
    return s;
};
  • 方法二

利用數字專字串,和eval(執行程式碼)實現陣列求和

function sum(arr) {
    return eval(arr.join("+"));
};

陣列排序

按照字母排序

var a = ['aa', 'dd', 'bb', 'cc']
console.log(a.sort()); // ["aa", "bb", "cc", "dd"]

給數字排序要用到回撥函式

var a = [20,10,5,2,3,4]
console.log(a.sort()); // [10,2,20,3,4,5]  ???? 沒有進行排序???
a.sort((a,b)=>{
  return a-b
})                     // [2,3,4,5,10,20]

高階一點的 按照數組裡面對象的屬性對陣列排序

let arr = [
           {
               "Name": "高處作業",
               "Num": 47
           }, {
               "Name": "文明施工",
               "Num": 68
           }, {
               "Name": "扣件式鋼管腳手架",
               "Num": 38
           }, {
               "Name": "施工用電",
               "Num": 64
           }, {
               "Name": "安全管理",
               "Num": 29
           }
       ]
       function fn(key){
           return function(value1,value2){
               return value1[key]-value2[key]
           }
       }
       let arr1 = arr.sort(fn("Num"))
       console.log(arr1);

陣列亂序

function shuffle(items) {
   return [...items].sort((a, b) => Math.random() > 0.5 ? -1 : 1);
}
console.log(shuffle([1,2,3,4,5,6]));

function shuffle(items) {
   items = [...items];
   const ret = [];
   while (items.length) {
       const idx = Math.floor(Math.random() * items.length);
       const item = items.splice(idx, 1)[0];
       ret.push(item);
   }
   return ret;
}

合併陣列

普通合併

var a = ['a','b']
console.log(a.concat([3,4,5])) // ["a", "b", 3, 4, 5]
console.log(a)      // ['a','b']

es6數組合並

var a = ["a","b"];
var b = ["c","d"];
var c = [...a,...b]
console.log(c)

陣列新增元素

陣列前面新增元素

var a = ['a','b']
console.log(a.unshift("c")) // 3 返回新增元素後陣列長度
console.log(a) // ['c','a','b']

陣列後面新增元素

var a = ['a','b']
console.log(a.push('c')) // 3 返回陣列長度
console.log(a) // ['a','b','c']

陣列刪除元素

刪除陣列前面元素

var a = ['a','b','c']
console.log(a.shift()) // 'a' 返回刪除第一項元素
console.log(a) // ['b','c']

刪除陣列後面元素

var a = ['a','b','c']
console.log(a.pop()) // 'c' 返回末尾刪除的元素
console.log(a) // ['a','b']

陣列擷取

**
1個引數表示的時陣列的當前位置開始一直到陣列末尾的所有項
**

**
2個引數則表示從起始位置至結束位置之間的所有項,但不包含結束位置項
**

var a = [1,3,5,7,9]
console.log(a.slice(2)) // [5,7,9] 從下標2開始一直擷取到最後
console.log(a) // [1,3,5,7,9]
console.log(a.slice(2,4)) [5,7] // 從下標2開始擷取到下標4的元素,不包含下標為4的值
console.log(a.slice()) // [1,3,5,7,9]
console.log(a.slice(1,-2)) // [3,5] 終止下標為負數,出現負數時,將負數加上陣列長度的值來替換該位置的數(1,3)
console.log(a.slice(-4,-1)) // [3,5,7] 兩個值都為負數時,都加上陣列長度值(1,4)

萬能的新增刪除

2個引數時,可以作刪除操作,分別表示要刪除陣列第一個元素的位置和項數

3個引數,可以作替換操作,分別表示起始位置、刪除的項數、插入的項

var a = [1,3,5,7,9]
console.log(a.splice(1,3)) // [3,5,7]
console.log(a) // [1,9]
var a = [1,3,5,7,9]
console.log(a.splice(1,0,2,3)) // [1,2,3,3,5,7,9]
var a = [1,3,5,7,9]
console.log(a.splice(1,2,2,3) // [1,2,3,7,9]

陣列反轉

將陣列中的元素倒敘排序,返回逆序的資料

var a = ['a','b','c','d']
console.log(a.reverse()); // ["d", "c", "b", "a"]

在陣列中查詢元素

indexOf(): 從陣列的首位向後找,返回元素下標

lastIndexOf(): 從陣列末尾向前找,返回元素下標

var a = [1,3,5,7,9]
console.log(a.indexOf(9)) // 4
console.log(a.lastIndexOf(9)) // 4
var a = [1,3,3,5,7,7,9]
console.log(a.indexOf(3)) // 1 預設從前向後找
console.log(a.lastIndexOf(3)) // 2 預設從後向前找

陣列迴圈遍歷

var arr = [1,3,5,7,9];
arr.forEach(function(item, index, arr){
console.log(item + '-' + index + '-' + (arr === arr));
});

陣列對映

var arr = [1,3,5,7,9];
var arr2 = arr.map(function(item){
return item*2
});
console.log(arr2) // [2,6,10,14,18]

查詢滿條件的值

對陣列中的每一項執行給定函式,返回滿足條件的元素組成的陣列

var arr = [1,3,5,7,9];
var arr2 = arr.filter(function(item,index){
return item > 3
});
console.log(arr2) // [5,7,9]

填充陣列

Array(20).fill(item)
// 20代表陣列中元素的個數,item代表每個陣列的值

深拷貝

let obj = {
    id:1,
    info:{
        name:"hello",
        age:24
    }
}
let obj2 = JSON.parse(JSON.stringify(obj))
obj2.id = 3;
obj2.info.name = "劉亦菲";
console.log(obj.id);   // 1
console.log(obj.info.name);   // hello

優逸客 孔令華