5.2 Array類型的方法彙總

来源:http://www.cnblogs.com/goldWen90/archive/2016/12/29/6231463.html
-Advertisement-
Play Games

項目上,經常需要對數組操作。所以,本文重點講解Array類型的一些常見的操作方法。 ...


所有對象都具有toString(),toLocaleString(),valueOf()方法。

1.數組轉化為字元串

toString(),toLocaleString() ,數組調用這些方法,則返回由數組每項字元串形式拼接而成的、以逗號分隔的字元串。實際上,為了創建這個字元串,會調用數組的每一項的toString()方法。

valueOf() 返回對象的原始值。

var color = ["red","green","blue"];
console.log( color.toString());//red,green,blue
console.log( color.toLocaleString());//red,green,blue
console.log(color.valueOf());//["red", "green", "blue"]

join()函數,接收一個分隔符的參數,將拼接成以分隔符連接的字元串。

console.log(color.join("|"));// red|green|blue

註:alert()函數接收的參數必須是字元串,如果參數不是字元串,比如說是對象,則在後臺預設調用參數的toString()方法。


2.數組元素的添加與刪除

push()向數組最後一位添加元素,返回添加後的數組的長度

pop() 刪除數組最後一位元素,返回刪除的項

shift() 刪除數組首位元素,返回刪除的項

unshift() 向數組首位添加元素,返回添加後的長度。


3.數組重排序方法

reverse() 翻轉數組項的順序;如:

var arr = [1,2,3];
console.log(arr.reverse());// [3,2,1]

sort() 數組排序。在後臺會調用數組中的每一項的 toString()方法,先轉換為字元串,然後再比較。按照從小到大排序。如:

var values = [0,1,5,10,15];
console.log(values.sort()); // [0,1,10,15,5]

可能上面並沒有得到我們想要的結果,我們可能想要按照數字大小來排序的。

那麼可以給sort()函數傳遞一個比較函數作為參數,比較函數接受兩個參數,

如果參數1大於參數2,則返回一個正數;

如果參數1小於參數2,則返回一個負數;

如果參數1等於參數2,則返回0;

如:

function compare(value1,value2){
    if(value1 > value2){
        return 1;
    }else if(value1 == value2){
        return 0;
    }else{
        return -1;
    }
}
console.log(values.sort(compare));//[0, 1, 5, 10, 15]

上面compare()函數,也可以改寫如下,執行跟上面一樣:

function compare(value1,value2){
    return (value1 - value2);
}

 


4. 數組和字元串的方法

concat();向數組末尾添加新的元素。如果是字元串調用這個方法,則是向字元串末尾拼接新的字元串。

slice();截取數組中的某些項。如果是字元串調用這個方法,則是截取字元串中的某些字元。可接受兩個參數。

splice(); 修改數組中的某些項。詳細請見:MDN的網站上的手冊:Array.prototype.splice()

indexOf();查找數組中的某項元素第一次出現在數組中的位置 。接受兩個參數,即要查找的項,和查找起點位置的索引。

lastIndexOf();類似於indexOf(),但是它是從數組的末尾查找。字元串也有這兩個查找元素的方法。都返回元素在數組或者字元串中的位置的索引,如果沒有找到,則返回-1。

下麵看一個容易出錯的小例子:

var person = {name: "Nicholas"}; //這是一個對象
var people = [{name: "Nicholas"}]; // 這是一個數組,包含一個元素,且這個元素是對象
var morePeople = [person];//這是一個數組,包含一個元素,且這個元素也是一個對象
console.log(people.indexOf(person));// -1
console.log(morePeople.indexOf(person)); // 0

為什麼第一個語句列印出-1呢,那麼說明 people 這個數組裡面不包含person這個對象,原因在此:

console.log(people[0] == person);//false 不屬於同一個對象

說明 people 數組裡面的那個對象元素跟person這個對象並不是同一個對象,雖然內容都一樣。後面會講到面向對象,你將會理解為什麼看似內容一樣,但是為什麼他們並不是同一個對象。

這幾個數組與字元串的方法,都是基於他們的副本操作的,也就是說,不影響原來操作的變數。

 


 

5.數組的迭代方法

數組的迭代,用我自己的話說就是數組的遍歷,即遍曆數組的每一項,去執行某些操作。

ES5中為數組定義了5個迭代方法。都接受兩個參數,第一個參數:數組中每一項要執行的函數;第二個參數可選:執行該函數的作用域,影響this的值。

作為第一個參數的函數,接受三個參數:數組項的值、該項在數組中的位置、數組對象本身。

every();對數組中每一項都執行函數,如果每一項返回true,則返回true;(返回布爾值)

some();……………………………………. ,如果有一項返回true,則返回true;(返回布爾值)

filter();………………………………………  ,返回 true 項組成的數組(返回數組)

map();……………………………………… .,返回所有項組成的數組(返回數組)

forEach();……………………………………,沒有返回值

var numbers = [0,1,5,10,15];

var resultNumbers = numbers.every(function(item,index,numbers){
    return (item > 5);
});
console.log(resultNumbers);// false;

var resultNumbers2 = numbers.some(function(item,index,numbers){
    return (item > 5);
});
console.log(resultNumbers2);// true;

var resultNumbers3 = numbers.filter(function(item,index,numbers){
    return (item > 5);
});
console.log(resultNumbers3);// [10, 15];

var resultNumbers4 = numbers.map(function(item,index,numbers){
    return (item * 2);
});
console.log(resultNumbers4);// [0, 2, 10, 20, 30]

var resultNumbers5 = numbers.forEach(function(item,index,numbers){
    return (item * 2);
});
console.log(resultNumbers5);// undefined 因為沒有返回值,所以,即使你return,也會列印出 undefined;

 


6.數組的歸併方法

reduce(),reduceRight()。迭代數組的所有的項,最終返回一個值。詳細見:MDN 的Array.prototype.reduce()

 

更詳細的關於數組的操作方法,後面會更新補充。

 

原文鏈接:http://www.1024idea.com/archives/358


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • import java.util.LinkedList; /** * 組合模式 * * @author TMAC-J 主要用於樹狀結構,用於部分和整體區別無區別的場景 想象一下,假設有一批連鎖的理髮店,你到每個店去理髮都是等同的 * 那麼假設不用組合模式,你到10家店理髮,你需要知道這10家店或者是... ...
  • Chatper 2 命令模式 命令是一個具象化(實例化)的方法調用。 A command is a reified method call. 定義一個基類,命令的控制對象由參數傳入: 為不同的游戲命令創建子類: 在輸入處理中,為每個按鈕存儲一個指針,綁定一個命令,且可以靈活替換新的命令: 1 cla ...
  • 這裡分析了php面向對象中static靜態屬性和靜態方法的調用。關於它們的調用(能不能調用,怎麼樣調用),需要弄明白了他們在記憶體中存放位置,這樣就非常容易理解了。靜態屬性、方法(包括靜態與非靜態)在記憶體中,只有一個位置(而非靜態屬性,有多少實例化對象,就有多少個屬性)。 <?phpclass Hum ...
  • Consul 概念(摘錄): Consul 是 HashiCorp 公司推出的開源工具,用於實現分散式系統的服務發現與配置。與其他分散式服務註冊與發現的方案,比如 Airbnb 的 SmartStack 等相比,Consul 的方案更“一站式”,內置了服務註冊與發現框 架、分佈一致性協議實現、健康檢 ...
  • /** * 橋接模式 * @author TMAC-J * 應用於多維度方案 * 用組合的形式代替繼承 * 符合單一職責原則 * 一個類只有一個引起他變化的原因 * 增加程式靈活性 */ public class BridgePattern { abstract class Road{ Car ca... ...
  • 目錄: 設計模式六大原則(1):單一職責原則 設計模式六大原則(2):里氏替換原則 設計模式六大原則(3):依賴倒置原則 設計模式六大原則(4):介面隔離原則 設計模式六大原則(5):迪米特法則 設計模式六大原則(6):開閉原則 設計模式六大原則(1):單一職責原則 定義:不要存在多於一個導致類變更 ...
  • 在前一篇文中,我們對一個聚合SDK服務端所需要實現的功能作了簡單的分析。通過兩個主要場景的功能流程圖,我們可以看到,作為多款游戲要適配多個渠道的統一請求轉發中心,TYPESDK服務端主要需要實現的功能有以下幾個要點: l 接收請求和返迴響應,通常是HTTP的請求響應。 l 獲取配置信息。 n 識別游 ...
  • ECMAScript 6 是 JavaScript 語言的最新一代標準,當前標準已於 2015 年 6 月正式發佈,故又稱 ECMAScript 2015。 ES6對數據類型進行了一些擴展 在js中使用ES6必須先聲明 嚴格模式 "use strict" let變數 let特性: 1、不允許重覆聲明 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...