「1分鐘學(xué)JS基礎(chǔ)」移除最后一個(gè)字符、Promise.allSettled()的使用、日期數(shù)組排序

大家好,本篇文章將用 1 分鐘的時(shí)間給大家分享下如何移除字符串最后一個(gè)字符,如何使用Promise.allSettled() 方法、以及如何進(jìn)行日期數(shù)組的排序。
一、如何移除字符串最后一個(gè)字符
1、常用方法
要從 JavaScript 中的字符串中刪除最后一個(gè)字符,您可能會(huì)使用 slice() 方法。它需要兩個(gè)參數(shù):開始索引位置和結(jié)束索引位置。slice() 支持負(fù)索引,這意味著 slice(0, -1) 等價(jià)于 slice(0, str.length - 1)
let?str?=?'Masteringjs.ioF';
str.slice(0,?-1);?//?Masteringjs.io
2、其他方法
slice() 使用起來(lái)更容易,但是還有其他的方法:substring() 和 replace()。substring() 沒有負(fù)索引,所以從字符串中刪除最后一個(gè)字符時(shí)一定要使用 str.length - 1 這個(gè)參數(shù) 。replace() 可以將字符串或正則表達(dá)式作為要替換的參數(shù)。使用 /.$$/, '') 用空字符串替換字符串的最后一個(gè)字符。
let?str?=?'Masteringjs.ioF';
str.substring(0,?str.length?-?1);?//?Masteringjs.io
str.substr(0,?str.length?-?1);?//?Masteringjs.io
str.replace(/.$/,?'');?//?Masteringjs.io
使用replace(),您可以根據(jù)正則表達(dá)式的內(nèi)容刪除字符串的最后一個(gè)字符。如果最后字符是數(shù)字,您還可以使用 .replace(/\d$/, '') ,如下所示。
//?For?a?number,?use?\d$.
let?str?=?'Masteringjs.io0';
str.replace(/\d$/,?'');?//?Masteringjs.io
let?str2?=?'Masteringjs.io0F';
//?If?the?last?character?is?not?a?number,?it?will?not?replace.
str.replace(/\d$/,?'');?//?Masteringjs.io0F;
二、如何理解?Promise.allSettled()
1、基礎(chǔ)介紹
[Promise.allSettled()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/allSettled) 很類似 [Promise.all()](https://masteringjs.io/tutorials/fundamentals/promise-all),但是有兩個(gè)關(guān)鍵點(diǎn)是不同的:
allSettled() 將會(huì)返回所有承諾的請(qǐng)求狀態(tài)即使有失敗的 allSettled() 將會(huì)返回一個(gè)對(duì)象數(shù)組,包含了請(qǐng)求的狀態(tài)和值,類似 {status, value, reason}
承諾包含三個(gè)狀態(tài):
Pending 表示操作正在進(jìn)行中 Fulfilled 表示操作成功 Rejected 表示操作失敗

“Settled”意味著承諾要么被履行(成功),要么被拒絕(失敗),所以你可以把 allSettled() 想象成等待數(shù)組中的所有承諾都被執(zhí)行。
2、返回值
allSettled() 將會(huì)返回一個(gè)對(duì)象數(shù)組,承諾被成功執(zhí)行時(shí)返回 {status: 'fulfilled', value},如果失敗將會(huì)返回 {status: 'rejected', reason}。
//?[{?status:?"fulfilled",?value:?"Hello?World"?},?{?status:?"rejected",?reason:?"fail"?}]
const?res?=?await?Promise.allSettled(
[Promise.resolve('Hello?World'),?
Promise.reject('fail')]);
如果要檢查承諾是否有執(zhí)行失敗的,你可以使用 Array#find() 方法。
res.find(({?status?})?=>?status?===?'rejected');
3、瀏覽器支持
allSettled() 在 IE 瀏覽器和 Node 12.9 以下的版本不支持,因此你可以使用 Promise.all() 模擬支持,示例代碼如下:
function?allSettled(promises)?{
??const?_promises?=?promises.map(p?=>?{
????return?p.
??????then(value?=>?({?status:?'fulfilled',?value?})).
??????catch(reason?=>?({?status:?'rejected',?reason?});
??});
??return?Promise.all(_promises);
}
三、如何排序日期數(shù)組
1、基礎(chǔ)方法
日期數(shù)組排序比較簡(jiǎn)單,我們可以使用內(nèi)置的排序方法就能輕松解決,示例代碼如下:
const?dates?=?[
??new?Date('July?20,?2021?20:17:40'),
??new?Date('August?19,?2021?23:15:30'),
??new?Date('March?13,?2021?04:20'),
??new?Date('October?2,?2021?11:05')
];
dates.sort((date1,?date2)?=>?date1?-?date2);
/*
[
??2021-03-13T09:20:00.000Z,
??2021-07-21T00:17:40.000Z,
??2021-08-20T03:15:30.000Z,
??2021-10-02T15:05:00.000Z
]
*/
dates;
2、按照對(duì)象的日期屬性排序
同樣,按照對(duì)象的日期屬性排序也很簡(jiǎn)單,同樣我們可以使用上述的內(nèi)置 sort() 方法,示例代碼如下:
const?d1?=?new?Date('2019-06-01');
const?d2?=?new?Date('2018-06-01');
const?d3?=?new?Date('2019-06-01');
const?objects?=?[
??{?createdAt:?d1,?name:?'Test?1'?},
??{?createdAt:?d2,?name:?'Test?2'?},
??{?createdAt:?d3,?name:?'Test?3'?}
];
objects.sort((a,?b)?=>?a.createdAt?-?b.createdAt);
//?[?'Test?2',?'Test?1',?'Test?3'?]
console.log(objects.map(o?=>?o.name));
3、去除時(shí)間按日期排序
有時(shí)候,你只需要按照日期排序,需要忽略日期的時(shí)間部分,這時(shí)你需要借助 [setHours()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/setHours) ?方法,示例代碼如下:
const?dates?=?[
??new?Date('July?20,?2021?20:17:40'),
??new?Date('August?19,?2021?23:15:30'),
??new?Date('July?20,?2021?23:15:30'),
??new?Date('August?19,?2021?20:17:40')
];
//?`setHours(0,?0,?0,?0)`?zeroes?out?hours,?minutes,?seconds,?and?milliseconds
dates.sort((date1,?date2)?=>?new?Date(date1).setHours(0,?0,?0,?0)?-?new?Date(date2).setHours(0,?0,?0,?0));
/*
[
??2021-07-21T00:17:40.000Z,
??2021-07-21T03:15:30.000Z,
??2021-08-20T03:15:30.000Z,
??2021-08-20T00:17:40.000Z
]
*/
dates;
結(jié)束
今天的分享就到這里,感謝大家的閱讀。
內(nèi)容參考:https://masteringjs.io/
