iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
自我挑戰組

Be friend with JavaScript系列 第 16

Day 16 - Array Methods

  • 分享至 

  • xImage
  •  

map()

和 forEach 很像,不同處在於 forEach 沒有回傳值,使用 map 時會 return 一個新的陣列,所以要用一個變數去接住它產生的新陣列

let skill = ["Java","C#","JavaScript"];
let UpperSkill = skill.map(function(i){
    return i.toUpperCase();
});
console.log(UpperSkill); // ["JAVA","C#","JAVASCRIPT"]

Or 箭頭函式

let arr = [ 1, 2, 3, 4 ];
let newArr = arr.map(i => i * 2);
console.log(newArr); // [2, 4, 6, 8 ]

find()

如果找到陣列中符合條件的第一個結果就回傳,return 後面要放條件

let skill = [
  {language:"Java",rating:9.5},
  {language:"C#",rating:7.0},
  {language:"JavaScript",rating:8.5}
];
let result = skill.find(i=>{
  return i.rating > 7.0;
})
console.log(result); // {language:"Java",rating:9.5}

如果找不到符合條件的,用 find() 時會回傳 undefined

let skill = [
  {language:"Java",rating:9.5},
  {language:"C#",rating:7.0},
  {language:"JavaScript",rating:8.5}
];
let result = skill.find(i=>{
  return i.rating > 10;
})
console.log(result); // undefined

filter()

find() 很像,差別在於 filter() 回傳的是全部符合條件的結果

let skill = [
  {language:"Java",rating:9.5},
  {language:"C#",rating:7.0},
  {language:"JavaScript",rating:8.5}
];
let result = skill.filter(i=>{
  return i.rating > 7.0;
})
console.log(result); // [{language:"Java",rating:9.5},{language:"JavaScript",rating:8.5}]

如果找不到符合條件的,用 filter() 時會回傳一個空陣列

let skill = [
  {language:"Java",rating:9.5},
  {language:"C#",rating:7.0},
  {language:"JavaScript",rating:8.5}
];
let result = skill.filter(i=>{
  return i.rating > 10;
})
console.log(result); // []

includes()

用來判斷陣列中是否包含某個元素,有的話回傳 true,沒有則回傳 false。
可以放入兩個參數,第一個參數為要尋找的元素,第二個參數為開始搜尋的元素索引值。
例如:

const arr = ['apple', 'banana', 'orange'];
console.log(arr.includes('apple')); // true (陣列中有 apple 所以回傳 true)
console.log(arr.includes('apple',0)); // true (陣列中有包含 apple,且 apple 的索引值為 0,所以回傳 true)
console.log(arr.includes('apple',1)); // false (陣列中雖包含 apple,但 apple 的索引值非為 1,所以回傳 false)
console.log(arr.includes('orange',-1)); // true (陣列中有包含 orange,且 orange 的索引值為 -1,所以回傳 true)
console.log(arr.includes('guava')); // false (陣列中沒有 guava 所以回傳 false)

some()

如果有任何一個條件符合,就 return true ,如果沒有任何符合條件的則 return false。

let skill = [
  {language:"Java",rating:9.5},
  {language:"C#",rating:7.0},
  {language:"JavaScript",rating:8.5}
];
let result = skill.some(i=>{
  return i.rating > 9.0;
})
console.log(result); // true

有一個結果 > 9.0,所以 return true
假如把條件改成 > 10.0,則會因為找不到符合的條件而回傳 false。

every()

如果每一個條件都符合,就 return true ,如果沒有每個條件都符合則 return false。

let skill = [
  {language:"Java",rating:9.5},
  {language:"C#",rating:7.0},
  {language:"JavaScript",rating:8.5}
];
let result = skill.every(i=>{
  return i.rating > 9.0;
})
console.log(result); // false

因為並不是每個結果都 > 9.0,所以 return false

sort()

排列,使用 sort() 要注意的是, sort() 會改變原本的陣列

let fruit = ["Orange","Apple","Guava"];
fruit.sort(); // 使用 sort() 會改變原陣列
console.log(fruit); // ['Apple', 'Guava', 'Orange']

如果在陣列裡放數字,讓 sort() 去排序的話,結果會照字串比大小的方式,只比第一個,所以會發現陣列中的數字並沒有按照大小來排,而是只照第一個數字的大小排列

let num = [54,11,24,56,64,78,34,7,75];
console.log(num.sort()); // [11,24,34,54,56,64,7,75,78]

所以排列數字時要用另一種方式,在 sort() 裡面給它一個 callback function ,並在裡面放兩個參數:

  • 由小到大排列:
sort((a, b)=>{
    return a-b;
})

ex:
將陣列裡的數字由小到大排列

let num = [54,11,24,56,64,78,34,7,75];
num.sort((a, b)=>{
  return a - b; 
})
console.log(num); // [7,11,24,34,54,56,64,75,78]

將陣列裡的字串長度由小到大排列

let text = ["php","C#","phython","JavaScript"];
text.sort((a, b)=>{
  return a.length - b.length;
})
console.log(text); // ["C#","php","phython","JavaScript"]
  • 由大到小排列:
sort((a, b)=>{
    return b-a;
})

ex:
將陣列裡的數字由大到小排列

let num = [54,11,24,56,64,78,34,7,75];
num.sort((a, b)=>{
  return b - a; 
})
console.log(num); // [78,75,64,56,54,34,24,11,7]

將陣列裡的字串長度由大到小排列

let text = ["php","C#","phython","JavaScript"];
text.sort((a, b)=>{
  return b.length - a.length;
})
console.log(text); // ["JavaScript","phython","php","C#"]

上一篇
Day 15 - Destructuring assignment
下一篇
Day 17 - Primitive and Reference
系列文
Be friend with JavaScript39
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言