JavaScript基礎(五)陣列

daotin發表於2018-05-03

陣列

陣列定義

  1. 通過字面量定義陣列var arr = [10,20,30];
  2. 通過建構函式定義陣列var arr = new Array(引數); // 引數位置為一個數值時為陣列長度,多個數值時為陣列中的元素。如果沒有引數的時候 Array後面的括號可以省略。

陣列操作

  1. 陣列長度: 陣列名.length;

陣列中儲存的資料型別一定是一樣的嗎?

型別可以不一樣。

陣列的長度是不是可以改變呢?

可以改變。

陣列高階API

1、判斷陣列和轉換陣列

instanceof // 是一個關鍵字,判斷A是否是B型別。
isArray()    //HTML5中新增 ,判斷是不是陣列
toString()    //把陣列轉換成字串,每一項用,分割
valueOf()    //返回陣列物件本身
join(變數)    //根據每個字元把陣列元素連起來變成字串變數可以有可以沒有。不寫預設用逗號分隔,無縫連線用空字串。

instanceof

var str1 = new String("abc");
var str2 = "abc";
console.log(str1 instanceof String); // true
console.log(str2 instanceof String); // false

join

//join是把陣列元素用特殊方式連結成字串(引數決定用什麼連結,無參預設用逗號連結)
var arr = ["關羽","張飛","劉備"];
var str1 = arr.join();
var str2 = arr.join(" ");//如果用空格的話,那麼元素之間會有一個空格
var str3 = arr.join("");//用空字串,連結元素,無縫連線
var str4 = arr.join("&");
console.log(str1);
console.log(str2);
console.log(str3);
console.log(str4);

arguements

只在函式中使用,代表傳入實參的陣列。

arguements 是偽陣列:不能修改長短的陣列。(可以修改元素,但是不能變長變短)

fn(1,2);
fn(1,2,3);
fn(1,2,3,4,5);
function fn(a,b){
    //只在函式中使用,實參的陣列。
    arguments[0] = 0; // 可以修改內容
    console.log(arguments);
    //偽陣列:不能修改長短的陣列。(可以修改元素,但是不能變長變短)
    arguments.push(1); 
    console.log(arguments instanceof Array); // false

    //形參個數
    console.log(fn.length);
    //實參個數
    console.log(arguments.length);
    // 形參和實參個數可以不同,因為實參傳入的時候可以形參的個數不一樣。

    // arguments.callee相當於函式名,這裡列印整個函式。
    console.log(arguments.callee);
}

2、陣列增刪和換位置(原陣列講被修改)

push() //在陣列最後面插入項,返回陣列的長度
//陣列1改後的長度 = 陣列1.push(元素1);
pop() //取出陣列中的最後一項,返回最後一項
//被刪除的元素 = 陣列1.pop();
unshift() //在陣列最前面插入項,返回陣列的長度
//陣列1改後的長度 = 陣列1.unshift(元素1);
shift() //取出陣列中的第一個元素,返回最後一項
//被刪除的元素 = 陣列1.shift();
reverse()    //翻轉陣列(原陣列講唄反轉,返回值也是被反轉後的陣列)
//反轉後的陣列 = 陣列1.reverse();

sort(); //給陣列排序,返回排序後的陣列。如何排序看引數。
//從小到大排序後的陣列 = 陣列1.sort(function(a,b){
// return a-b;
//});

sort

var arr2 = [7,6,15,4,13,2,1];
console.log(arr2); // 7,6,15,4,13,2,1
console.log(arr2.sort()); // 1,13,15,2,4,6,7

問題:只能通過第一位排列。(對首字母的 unicode 編碼進行排序)

解決:sort方法不穩定,設計的時候就是這麼設計的,可以通過回撥函式進行規則設定。

console.log(arr2);
console.log(arr2.sort(function (a,b) {
    return a-b;   //升序   //b-a:降序
}));

迭代方法

代替 for 迴圈。

every

every()他的返回值是一個 boolean 型別值。而引數是一個回撥函式。
引數有三個。名字隨便起,但是表示的意思還是這樣順序的。

var arr = ["關長","張飛","趙子龍","馬超","黃忠"];

// function (element,index,array)
// element:陣列元素的值
// index:索引
// array:呼叫這個方法的整個陣列物件(一般不用)

arr.every(function(fff,www,ggg) {
    console.log(fff);
    console.log(www); 
    console.log(ggg);
    return true;
}); 
// 關長
// 0
// ["關長", "張飛", "趙龍", "馬超", "黃忠"]
// 張飛
// 1
// ["關長", "張飛", "趙龍", "馬超", "黃忠"]
// 趙龍
// 2
// ["關長", "張飛", "趙龍", "馬超", "黃忠"]
// 馬超
// 3
// ["關長", "張飛", "趙龍", "馬超", "黃忠"]
// 黃忠
// 4
// ["關長", "張飛", "趙龍", "馬超", "黃忠"]
var arr = ["青花瓷", "一路向北", "軌跡"];
    var flag = arr.every(function (ele, index) { // 只要有一個沒滿足條件,就返回false
     ele.length > 2;
}); 

console.log(flag); // false

filter

filter返回值是一個新陣列。return為 true 的陣列。

var arr = ["關長","張飛","趙子龍","馬超","黃忠"];
var arr1 = arr.filter(function (ele,index,array) {
    if(ele.length>2){
      return true;
    }
    return false;
});

console.log(arr1); // ["趙子龍"]    

foreach

foreach遍歷陣列(無返回值,純運算元組中的元素)

var arr = ["關長","張飛","趙子龍","馬超","黃忠"];
var str = "";
arr.forEach(function (ele,index,array) {
    str+=ele;
});
console.log(str); // 關長張飛趙子龍馬超黃忠

map

map有返回值,返回什麼都新增到新陣列中。

var arr = ["關長","張飛","趙子龍","馬超","黃忠"];
var arr2 = arr.map(function (ele,index,array) {
    return ele+"你好";
})

console.log(arr2); // (5) ["關長你好", "張飛你好", "趙子龍你好", "馬超你好", "黃忠你好"]

some

some有返回值,如果函式結果有一個是true,那麼some方法結果也是true。

var arr = ["關長","張飛","趙子龍","馬超","黃忠"];
var flag = arr.some(function (ele,index,array) {
    if(ele.length>2){
        return true;
    }
    return false;
})

console.log(flag); // true    

push

向陣列的末尾新增一個或更多元素,並返回新的長度。

注意: 新元素將新增在陣列的末尾。

注意: 此方法改變陣列的長度。

提示: 在陣列起始位置新增元素請使用 unshift() 方法。

pop

刪除陣列的最後一個元素並返回刪除的元素。

注意:此方法改變陣列的長度!

提示: 移除陣列第一個元素,請使用 shift() 方法。

瞭解方法

concat() //把引數拼接到當前陣列
//新陣列 = 陣列1.concat(陣列2);
slice() //從當前陣列中擷取一個新的陣列,不影響原來的陣列,引數start從0開始,end從1開始
//新陣列 = 陣列1.slice(索引1,索引2);
splice()//刪除或替換當前陣列的某些專案,引數start,deleteCount,options(要替換的專案)
//新陣列 = 陣列1.splice(起始索引,結束索引,替換內容);
indexOf()、lastIndexOf() //如果沒找到返回-1
//索引值 = 陣列.indexOf/lastIndexOf(陣列中的元素);
forEach() // 陣列每個元素都執行一次回撥函式。

清空陣列

var array = [1,2,3,4,5,6];
// 方法一:刪除陣列中所有專案 
array.splice(0,array.length); 
// 方法二:length屬性可以賦值,其它語言中length是隻讀
array.length = 0;
// 方法三:
array = []; //推薦


相關文章