iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 7
0

Day7-課題內容

今天的題目當中,將接續第四天Array Cardio中的內容,針對幾個沒有被應用到的陣列方法,在這個章節中練習,並且再介紹幾個常用的陣列方法。

陣列方法

在今天的課題中,有些陣列方法是之前有介紹過的,有些則是新的。在這邊整理今天課題中會遇到的所有陣列方法:

  1. array.some()
    此方法會經由指定判斷式來確任陣列中的每個元素,如果其中一個元素調用判斷式的回傳值為true,則最後回傳值為true,否則回傳值為false
let testArray = [3, 4, 5, 6, 7];
lett trueArray = testArray.some(function(item){
    if(item > 6){
        return item
    };
});
let falseArray = testArray.some(function(item){
    if(item > 7){
        return item
    };
});
console.log(trueArray); //true
console.log(falseArray); //false
  1. array.every()
    此方法與.some()類似,但需要所有元素調用判斷式的回傳值為true,最後回傳值才會為true,否則回傳值為false
let testArray = [3, 4, 5, 6, 7];
let trueArray = testArray.every(function(item){
    if(item > 2){
        return item
    };
});
let falseArray = testArray.every(function(item){
    if(item > 6){
        return item
    };
});
console.log(trueArray); //true
console.log(falseArray); //false
  1. array.find()
    此方法會依序對每個元素執行一次回呼函數,直到找到第一個判斷式為true的元素會立刻回傳該元素,否則回傳undefined
let testArray = ['b', 'c', 'd', 'a', 'e'];
let findArray = testArray.find(function(item){
    if(item === 'a'){
        return item
    };
});
console.log(findArray); //a
  1. array.findIndex()
    此方法與find()類似,當找到第一個判斷式為true的元素會立刻回傳該元素在陣列中的index,否則回傳-1
let testArray = ['b', 'c', 'd', 'a', 'e'];
let indexArray = testArray.findIndex(function(item){
    if(item === 'a'){
        return item
    };
});
console.log(indexArray); //3
  1. array.splice()
    此方法可以藉由新增或移除陣列內的元素,來修改陣列內的內容。其撰寫規則如下:
array.splice(startIndex, deleteCount, addItem1, addItem2, ...)
//移除元素
let testArray = ['a', 'b', 'c', 'd', 'e'];
let removeB = testArray.splice(1, 1)
console.log(testArray); 
//['a', 'c', 'd', 'e']
//新增元素
let testArray = ['a', 'b', 'c', 'd', 'e'];
let addB = testArray.splice(1, 0, 'b')
console.log(testArray); 
//['a', 'b', 'b', 'c', 'd', 'e']

進入JS30-Day7

作者在草稿中已經先分別給了兩個陣列,都是由包含兩種屬性的物件所組成。

第一題

Is at least one person 19?
透過array.some()方法,判斷陣列中是否有任一年齡大於19的人。年齡的計算可以利用new Data().getFullYear()取得目前的年份,再減去每個物件中的出生年份來取得:

let checkAnyone = people.some(function(person){
    //取得目前的年份
    let currentYear = new Date().getFullYear();
    //計算年齡
    let age = currentYear - person['year'];
    //判斷是否有年齡大於19歲的人
    return age >= 19;
});
console.log(checkAnyone); //True

第二題

Is everyone 19?
透過array.every()方法,判斷陣列中是否每個人的年齡都大於19:

let checkAnyone = people.every(function(person){
    //取得目前的年份
    let currentYear = new Date().getFullYear();
    //計算年齡
    let age = currentYear - person['year'];
    //判斷是否有年齡大於19歲的人
    return age >= 19;
});
console.log(checkAnyone); //False

第三題

Find the comment with the ID of 823423.
透過array.find()方法,找出符合ID為823423的物件:

let findID = comments.find(function(item){
    return item['id'] === 823423;
});
console.log(findID); //{text: "Super good", id: 823423}

第四題

Find the comment with this ID.
透過array.findIndex()方法,找出符合ID為823423的物件元素在陣列中的Index,再利用此Index取出該元素以及其comment:

let findIndex = comments.findIndex(function(item){
    return item['id'] === 823423;
});
let getText = comments[findIndex].text;
console.log(getText); //Super good

第五題

Delete the comment with the ID of 823423.
透過array.findIndex()方法取得Index之後,再利用array.splice()方法來移除該物件:

let findIndex = comments.findIndex(function(item){
    return item['id'] === 823423;
});
comments.splice(findIndex, 1);
console.log(comments);

總結

在今天陣列方法第二篇當中,我們使用到的幾個陣列的方法:

  1. some()
  2. every()
  3. find()
  4. findIndex()
  5. splice()

以上就是今天的方法與心得,感謝您的閱讀,也歡迎留言指教。

參考資料

  1. javascript30
  2. MDN文件-Array

上一篇
JS30-Day6-Type Ahead
下一篇
JS30-Day8-Fun with HTML5 Canvas
系列文
新手也能懂的JS3030

尚未有邦友留言

立即登入留言