iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 16
0
Modern Web

從零開始進入 JavaScript & TypeScript 的世界系列 第 16

第16天-使用更高階的語法-filter

  • 分享至 

  • xImage
  •  

filter 的世界裡就是把一個集合透過你想要做的事情之後變成另一個集合,完全不用去 loop collection。

前兩天我們介紹了 mapreduce,相信大家應該會覺的這兩者的操作方式其實不會差太多,都是針對一個集合做操作,然後告訴他想要做的事情。

今天要介紹的 filter 其實也是一樣的,就是把想要的給挑出來。我們從例子來下手吧。

假設我們有以下的資料:

interface Student {
    name : string;
    height :number;
}

let students = [
    {
        name:"Love",
        height : 164
    },
    {
        name: "Andrew",
        height : 178
    },
    {
        name: "Marie",
        height : 165
    },
    {
        name: "Faith",
        height : 180
    },
    {
        name: "Kayla",
        height : 160
    },
]

我想要從 students 裡面挑出所有身高大於 165 公分的學生出來,如果我們不使用 filter 的話,我們就會必須這樣做:

let greater165Students:Student[] = [];
for(let i=0; i< students.length; i++) {
    if (students[i].height > 165) {
        greater165Students.push(students[i]);
    }
}
for(let i=0; i<greater165Students.length; i++){
    console.log(greater165Students[i]);
}
// 上述的結果會是
// { name: 'Andrew', height: 178 }
// { name: 'Faith', height: 180 }

如果我們使用 filter 我們就可以這樣做:

let greaterThan165Students = students.filter(s => s.height > 165);
for (let i = 0; i < greaterThan165Students.length; i++) {
    console.log(greaterThan165Students[i]);
}
// 上述的結果會是
// { name: 'Andrew', height: 178 }
// { name: 'Faith', height: 180 }

上面的重點就在於 s => s.height > 165,這行程式碼的意思就是對於 students 裡的每一個元素 s 當其判斷 s.height > 165 為真實,就要保留下來。

想一想

今天的範例中,如果我們不要使用 for 迴圈列印所有符合 height > 165 的學生,但是要有相同的結果我們可以怎麼做呢?

map 的想一想解答

function  squareList(data:  number[]) {
    return  data.map(x  =>  x*x);
}

上一篇
第15天-使用更高階的語法-map
下一篇
第17天-使用更高階的語法 forEach
系列文
從零開始進入 JavaScript & TypeScript 的世界30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言