iT邦幫忙

2022 iThome 鐵人賽

DAY 7
0
自我挑戰組

JavaScript 30天挑戰 自學筆記系列 第 7

JS30 自學筆記 Day07_Array Cardio Day 2

  • 分享至 

  • xImage
  •  

今日任務:認識陣列的方法2

資料

const people = [
    { name: 'Wes', year: 1988 },
    { name: 'Kait', year: 1986 },
    { name: 'Irv', year: 1970 },
    { name: 'Lux', year: 2015 },
]

const comments = [
    { text: 'Love this!', id: 523423 },
    { text: 'Super good', id: 823423 },
    { text: 'You are the best', id: 2039842 },
    { text: 'Ramen is my fav food ever', id: 123523 },
    { text: 'Nice Nice Nice!', id: 542328 },
]

Array.prototype.some()

  • 透過給定函式、測試陣列中是否至少有一個元素符合函式
  • 回傳布林值

範例: 是否至少有一位超過19歲的人?

const IsAudult = people.some((person) => {
    const currentYear = new Date().getFullYear(); //取得年份
    return currentYear - person.year >= 19;
});
console.log('至少一人超過19歲?', IsAudult);

Array.prototype.every()

  • 測試陣列中的所有元素是否都通過函式
  • 回傳布林值

範例: 是否全部人都超過19歲的人?

const AllAudult = people.every((person) => {
    const currentYear = new Date().getFullYear();
    return currentYear - person.year >= 19;
});
console.log('全部人超過19歲?', AllAudult);

Array.prototype.find()

  • 回傳第一個滿足函式的元素
  • 否則回傳 undefined

範例: 找出id=823423的第一個人

const comment = comments.find((comment) => {
    return comment.id === 823423;
});
console.log('id=823423的第一個人', comment);

Array.prototype.findIndex()

  • 根據提供函式,尋找陣列中符合的元素,並回傳index(索引)
  • 如果沒有符合的對象,將返回 -1

範例: 找出id=823423的人的index

const index = comments.findIndex((comment) => {
    return comment.id === 823423;
});
console.log('id=823423的第一個人的id= ', index);

怎麼刪掉陣列中的某筆資料呢?

方法1: Array.prototype.splice()

  • 藉由刪除既有元素或加入新元素來改變一個陣列的內容。
  • 改變原陣列
comments.splice(index, 1) 
console.log(comments) //原陣列改變

方法2: Array.prototype.slice()

  • 回傳新陣列,有點像剪下來要的部分(開頭,結尾),注意不包含結尾
  • 不改變原陣列

    會得到兩個陣列

    因為沒有使用淺拷貝
const newComments = [...comments.slice(0, index), ...comments.slice(index + 1)];
console.log(newComments);
console.log('console.log(comments)', comments);


而且沒有影響到原本的陣列

方法3: Array.prototypefilter()

方法3(影片中沒有)

  • 還有一個辦法,在第4天教的.filter
  • 不需要使用淺拷貝,也沒有影響到原本的陣列
const newComments = comments.filter(commet=>(commet.id !== 823423))
console.log(newComments)

今日學習到的:

  • some():陣列中是否至少有一個元素符合函式
  • every():陣列中元素是否都通過函式
  • find(): 回傳第一個滿足函式的元素
  • findIndex(): 尋找陣列中符合的元素,回傳index(索引)
  • splice(): 藉由刪除既有元素並/或加入新元素來改變一個陣列的內容。
  • slice(): 剪下來要的部分(開頭,結尾),並回傳新陣列

效果連結:連結

參考連結:
MDN:some
MDN:findIndex
MDN:splice
MDN:slice


上一篇
JS30 自學筆記 Day06_Ajax Type Ahead
下一篇
JS30 自學筆記 Day08_Fun with HTML5 Canvas
系列文
JavaScript 30天挑戰 自學筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言