###### tags: `資料庫程式設計` `Javascript`
> 有什麼新方法都可以放上來喔
> 我只是放我通過的程式碼而已
# OnlineTest - Javascript 單元 1
## 1. Javascript排序
:::info
將輸入的陣列由大排序到小
EX: [5,8,10,1,3] => [10,8,5,3,1]
```javascript=
function MyMainFunc(input) {
return input.sort(function(a,b) {
return b - a;
});
}
```
:::
## 2. 陣列總和
:::info
將輸入的陣列數值全部加總
EX: [1,2,3] => 6
```javascript=
function MyMainFunc(numbers) {
let sum = 0;
for (let i=0; i<numbers.length; i++) {
sum += numbers[i];
}
return sum;
}
```
:::
## 3. 取得URL的主機名稱
:::info
將輸入一個URL字串需回傳URL的主機名稱
EX:
- "https://google.com/" => "google.com"
- "http://120.108.204.116/onlinetest" => "120.108.204.116"
```javascript=
function MyMainFunc(url) {
return url.split("/")[2];
}
```
:::
## 4. 質數判斷
:::info
輸入一個陣列,找出其中的所有質數,回傳時按照輸入的順序排列
EX:
[2,11,5,6,7,8,100,101] => [2,11,5,7,101]
```javascript=
function MyMainFunc(numbers) {
return numbers.filter((value) => {
if (value === 1) return;
for (let i=2; i*i<=value; i++) {
if (value % i === 0) return ;
}
return value;
});
}
```
:::
## 5. 陣列的最大和最小值
:::info
輸入一個陣列,回傳陣列中最大值+最小值
EX:
- [-100,100,2] => 0
- [1,2,3,4,5] => 6
```javascript=
function MyMainFunc(numbers) {
return Math.max.apply(null, numbers) + Math.min.apply(null, numbers);
}
```
:::
## 6. 移除重複的單字
:::info
輸入一個字串,單字由空格分開,將重複的單字移除後回傳
EX:
- "abc abc abc" => "abc"
- "aa bb cc aa dd" => "aa bb cc dd"
```javascript=
function MyMainFunc(str) {
return [... new Set(str.split(" "))].join(" ");
}
```
:::
## 7. 取得timestamp的UTC時間
:::danger
輸入一個數字,為毫秒的時間戳,輸出一個為UTC時間的字串
輸出格式:"YYYY/MM/DD HH:MM:SS",須補0
EX:
- 1646230477994 => "2022/03/02 14:14:37"
- 0 => "1970/01/01 00:00:00"
```javascript=
function MyMainFunc(timestamp) {
timestamp -= 8*60*60*1000;
const d = new Date(timestamp);
return format(d);
}
function format(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hr = String(date.getHours()).padStart(2, '0');
const min = String(date.getMinutes()).padStart(2, '0');
const s = String(date.getSeconds()).padStart(2, '0');
return year + '/' + month + '/' + day + ' ' + hr + ':' + min + ':' + s;
}
```
> 請教我更好的做法 >~<
:::warning
> 綜合幾個人的 solution
```javascript
function MyMainFunc(timestamp) {
var date = new Date(timestamp);
var year = date.getUTCFullYear(); // 直接用 getUTCxxx 取得 UTC 格式時間
var month = ("0" + (date.getUTCMonth() + 1)).slice(-2); // str.slice(n) 取長度為 n 的子字串
var day = ("0" + date.getUTCDate()).slice(-2); // 負代表從後面開始取
var hr = ("0" + date.getUTCHours()).slice(-2);
var min = ("0" + date.getUTCMinutes()).slice(-2);
var sec = ("0" + date.getUTCSeconds()).slice(-2);
var dateString = `${year}/${month}/${day} ${hr}:${min}:${sec}`;
return dateString;
}
```
:::
## 8.解析JSON格式
:::info
輸入一個字串,回傳這個json物件key的數量
EX:
- '{"a":1,"b":2}' => 2
- '{"a":1,"b":{"c":2},"c":"1234","d":"e"}' => 4
```javascript=
function MyMainFunc(str) {
return Object.keys(JSON.parse(str)).length;
}
```
:::
## 9. 展開巢狀陣列
:::info
輸入一個巢狀陣列,將此巢狀陣列展開成一維陣列
EX: [1, 2, [4, [6, 7], 5], [8, 9]] => [1, 2, 4, 6, 7, 5, 8, 9]
```javascript=
function MyMainFunc(array) {
return array.flat(Infinity);
}
```
:::
## 10. 取代字串
:::info
輸入三個字串,將一個字串(參數1)中的所有指定字串(參數2)取代成新的字串(參數3)
EX:
- MyMainFunc("12321","2","4") => "14341"
- MyMainFunc("abcabc","abc","def") => "defdef"
```javascript=
function MyMainFunc(str, substr, newSubStr) {
return str.replaceAll(substr, newSubStr);
}
```
:::