摘要:指南一作者簡介是推出的一個天挑戰。目的是幫助人們用純來寫東西,不借助框架和庫,也不使用編譯器和引用?,F在你看到的是這系列指南的第篇。完整指南在從零到壹全棧部落。篩出運行結果是的組成數組返回。
Day04 - Array Cardio 指南一
實現效果作者:?liyuechun
簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰。項目免費提供了 30 個視頻教程、30 個挑戰的起始文檔和 30 個挑戰解決方案源代碼。目的是幫助人們用純 JavaScript 來寫東西,不借助框架和庫,也不使用編譯器和引用。現在你看到的是這系列指南的第 3 篇。完整指南在 從零到壹全棧部落。
這一部分主要是熟悉 Array 的幾個基本方法,其中有兩個(filter、map)是 ES6 定義的迭代方法,這些迭代方法都有一個特點,就是對數組的每一項都運行給定函數,根據使用的迭代方法的不同,有不同的返回結果。
文檔給出了一個初始操作的 inventor 數組,基于這個數組可以練習一下Array的各個方法,請用Google Chrome瀏覽器打開 HTML 后在Console面板中查看輸出結果。
炫酷的調試技巧在 Console 中我們常用到的可能是 console.log() ,但它還有一個很炫的輸出,按照表格來輸出,效果如下:
console.table(thing)原始數據
本節中我們將圍繞如下數據進行相關操作以便快速掌握數組的相關方法的使用。
const inventors = [{
first: "Albert",
last: "Einstein",
year: 1879,
passed: 1955
},
{
first: "Isaac",
last: "Newton",
year: 1643,
passed: 1727
},
{
first: "Galileo",
last: "Galilei",
year: 1564,
passed: 1642
},
{
first: "Marie",
last: "Curie",
year: 1867,
passed: 1934
},
{
first: "Johannes",
last: "Kepler",
year: 1571,
passed: 1630
},
{
first: "Nicolaus",
last: "Copernicus",
year: 1473,
passed: 1543
},
{
first: "Max",
last: "Planck",
year: 1858,
passed: 1947
},
{
first: "Katherine",
last: "Blodgett",
year: 1898,
passed: 1979
},
{
first: "Ada",
last: "Lovelace",
year: 1815,
passed: 1852
},
{
first: "Sarah E.",
last: "Goode",
year: 1855,
passed: 1905
},
{
first: "Lise",
last: "Meitner",
year: 1878,
passed: 1968
},
{
first: "Hanna",
last: "Hammarstr?m",
year: 1829,
passed: 1909
}
];
const people = ["Beck, Glenn", "Becker, Carl", "Beckett, Samuel", "Beddoes, Mick", "Beecher, Henry",
"Beethoven, Ludwig", "Begin, Menachem", "Belloc, Hilaire", "Bellow, Saul", "Benchley, Robert",
"Benenson, Peter", "Ben-Gurion, David", "Benjamin, Walter", "Benn, Tony", "Bennington, Chester",
"Benson, Leana", "Bent, Silas", "Bentsen, Lloyd", "Berger, Ric", "Bergman, Ingmar", "Berio, Luciano",
"Berle, Milton", "Berlin, Irving", "Berne, Eric", "Bernhard, Sandra", "Berra, Yogi", "Berry, Halle",
"Berry, Wendell", "Bethea, Erin", "Bevan, Aneurin", "Bevel, Ken", "Biden, Joseph", "Bierce, Ambrose",
"Biko, Steve", "Billings, Josh", "Biondo, Frank", "Birrell, Augustine", "Black Elk", "Blair, Robert",
"Blair, Tony", "Blake, William"
];
const data = ["car", "car", "truck", "truck", "bike", "walk", "car", "van", "bike", "walk", "car", "van", "car",
"truck", "pogostick"
];
篩選 16 世紀出生的發明家
filter
過濾操作,有點像 SQL 里面的 select 語句。篩出運行結果是 true 的組成數組返回。
const __fifteen = inventors.filter(function(inventor) {
if (inventor.year >= 1500 && inventor.year < 1600 ) {
return true;
} else {
return false;
}
});
console.table(__fifteen);
前面幾篇已經提到過箭頭函數,這里可以簡化一下,用箭頭函數來寫,而且由于 if 語句的存在并不是必要的,可以寫成下面這樣:
const fifteen = inventors.filter(inventor =>(inventor.year >= 1500 && inventor.year < 1600)); console.table(fifteen);
控制臺效果圖:
展示他們的姓和名map
map 形象的理解就是,把數組中的每個元素進行處理后,返回一個新的數組。
例子如下:
// Array.prototype.map()
// 2. 展示他們的姓和名
const fullNames = inventors.map(inventor => `${inventor.first} ${inventor.last}`);
console.log(fullNames);
控制臺效果圖:
把他們按照年齡從大到小進行排序sort
默認情況下,Array.prototype.sort() 會將數組以字符串的形式進行升序排列(10 會排在 2 之前),但 sort 也可以接受一個函數作為參數。所以需要對數字大小排序時需要自己設定一個比較函數,例子如下:
// Array.prototype.sort()
// 3. 把他們按照年齡從大到小進行排序
const ordered = inventors.sort((a, b) => {
if(a.year > b.year) {
return 1;
} else {
return -1;
}
});
console.table(ordered);
上面的代碼可以簡寫成:
const ordered = inventors.sort((a, b) => a.year > b.year ? 1 : -1); console.table(ordered);
控制臺效果圖:
計算所有的發明家加起來一共活了多少歲reduce
// Array.prototype.reduce()
// 4. 計算所有的發明家加起來一共活了多少歲
const totalYears = inventors.reduce((total, inventor) => {
return total + (inventor.passed - inventor.year);
}, 0);
console.log(totalYears);
控制臺效果圖:
// 5. 按照他們活了多久來進行排序
const oldest = inventors.sort((a, b) => {
const lastInventor = a.passed - a.year;
const nextInventor = b.passed - b.year;
return lastInventor > nextInventor ? -1 : 1;
});
console.table(oldest);
控制臺效果圖:
map、filter結合使用篩選出網頁中含有CSS標題的數據名稱const category = document.querySelectorAll(".subject-list h2 a");
const links = Array.from(category);
const CSS_BOOK = links
.map(link => link.textContent)
.filter(streetName => streetName.includes("CSS"));
由 querySelectorAll() 獲取到的是一個 NodeList ,它并非是 Array 類型的數據,所以并不具有 map 和 filter 這樣的方法,所以如果要進行篩選操作則需要把它轉化成 Array 類型,使用下面示例之中的 Array.from() 來轉化。
Google Chrome瀏覽球操作如下:
打開https://book.douban.com/tag/web網頁。
在控制臺按如下圖操作即可
按照姓氏來對發明家進行排序const alpha = people.sort((lastOne, nextOne) => {
const [aLast, aFirst] = lastOne.split(", ");
const [bLast, bFirst] = nextOne.split(", ");
return aLast > bLast ? 1 : -1;
});
console.log(alpha);
控制臺效果圖:
統計給出數組中各個物品的數量reduce
這是一個歸并數組的方法,它接受一個函數作為參數(這個函數可以理解成累加器),它會遍歷數組的所有項,然后構建一個最終的返回值,這個值就是這個累加器的第一個參數。第二個參數中的0是previousValue的初始值,例子如下:
[0,1,2,3,4].reduce((previousValue, currentValue, index, array) => {
return previousValue + currentValue;
},0);
而此處我們需要統計一個給定數組中各個項的值,恰好可以用到這個方法,在累加器之中,將統計信息存入一個新的對象,最后返回統計值。
const data = ["car", "car", "truck", "truck", "bike", "walk", "car", "van", "bike", "walk", "car", "van", "car",
"truck", "pogostick"
];
const transportation = data.reduce( (obj, item) => {
if (!obj[item]) {
obj[item] = 0;
}
obj[item]++;
return obj;
}, {});
console.log(transportation);
源碼下載
Github Source Code
社群品牌:從零到壹全棧部落
定位:尋找共好,共同學習,持續輸出全棧技術社群
業界榮譽:IT界的邏輯思維
文化:輸出是最好的學習方式
官方公眾號:全棧部落
社群發起人:春哥(從零到壹創始人,交流微信:liyc1215)
技術交流社區:全棧部落BBS
全棧部落完整系列教程:全棧部落完整電子書學習筆記
| 關注全棧部落官方公眾號,每晚十點接收系列原創技術推送 |
|---|
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.hztianpu.com/yun/84156.html
摘要:中文指南二作者簡介是推出的一個天挑戰。完整中文版指南及視頻教程在從零到壹全棧部落。第七天的練習是接著之前中文指南一的練習,繼續熟練數組的方法,依舊沒有頁面顯示效果,所以請打開瀏覽器的面板進行調試運行。 Day07 - Array Cardio 中文指南二 作者:?liyuechun 簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰。項目免費提供了 30 個...
摘要:加入我們,一起挑戰吧掃碼申請加入全棧部落 JavaScript 30 - 一起做一次了不起的挑戰 (Node+Vue+微信公眾號開發)企業級產品全棧開發速成周末班首期班(10.28號正式開班,歡迎搶座) 在Github上看到了wesbos的一個Javascript30天挑戰的repo,旨在使用純JS來進行練習,不允許使用任何其他的庫和框架,該挑戰共30天,我會在這里復現這30天遇到的挑...
摘要:上一篇文章指南下一篇文章為在集合上執行基本的聚合任務提供了一些命令。也可以給傳遞一個查詢文檔,會計算查詢結果的數量對分頁顯示來說總數非常必要共個,目前顯示個。使用時必須指定集合和鍵。指定要進行分組的集合。 上一篇文章:MongoDB指南---17、MapReduce下一篇文章: MongoDB為在集合上執行基本的聚合任務提供了一些命令。這些命令在聚合框架出現之前就已經存在了,現在(大多...
摘要:上一篇文章指南下一篇文章為在集合上執行基本的聚合任務提供了一些命令。也可以給傳遞一個查詢文檔,會計算查詢結果的數量對分頁顯示來說總數非常必要共個,目前顯示個。使用時必須指定集合和鍵。指定要進行分組的集合。 上一篇文章:MongoDB指南---17、MapReduce下一篇文章: MongoDB為在集合上執行基本的聚合任務提供了一些命令。這些命令在聚合框架出現之前就已經存在了,現在(大多...
閱讀 2554·2021-09-02 15:11
閱讀 1681·2019-08-30 15:43
閱讀 2262·2019-08-29 13:48
閱讀 3002·2019-08-26 13:55
閱讀 2244·2019-08-23 15:09
閱讀 3068·2019-08-23 14:40
閱讀 3703·2019-08-23 14:23
閱讀 2796·2019-08-23 14:20