「1分钟学JS基础」移除最后一个字符、Promise.allSettled()的使用、日期数组排序

共 3739字,需浏览 8分钟

 ·

2021-11-15 19:51

大家好,本篇文章将用 1 分钟的时间给大家分享下如何移除字符串最后一个字符,如何使用Promise.allSettled() 方法、以及如何进行日期数组的排序。

一、如何移除字符串最后一个字符

1、常用方法

要从 JavaScript 中的字符串中删除最后一个字符,您可能会使用 slice() 方法。它需要两个参数:开始索引位置和结束索引位置。slice() 支持负索引,这意味着 slice(0, -1) 等价于 slice(0, str.length - 1)

let str = 'Masteringjs.ioF';
str.slice(0-1); // Masteringjs.io

2、其他方法

slice() 使用起来更容易,但是还有其他的方法:substring() 和 replace()。substring() 没有负索引,所以从字符串中删除最后一个字符时一定要使用 str.length - 1 这个参数 。replace() 可以将字符串或正则表达式作为要替换的参数。使用 /.$$/, '') 用空字符串替换字符串的最后一个字符。

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(),您可以根据正则表达式的内容删除字符串的最后一个字符。如果最后字符是数字,您还可以使用 .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、基础介绍

[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),但是有两个关键点是不同的:

  • allSettled() 将会返回所有承诺的请求状态即使有失败的
  • allSettled() 将会返回一个对象数组,包含了请求的状态和值,类似 {status, value, reason}

承诺包含三个状态:

  • Pending 表示操作正在进行中
  • Fulfilled 表示操作成功
  • Rejected 表示操作失败



“Settled”意味着承诺要么被履行(成功),要么被拒绝(失败),所以你可以把 allSettled() 想象成等待数组中的所有承诺都被执行。

2、返回值

allSettled() 将会返回一个对象数组,承诺被成功执行时返回 {status: 'fulfilled', value},如果失败将会返回 {status: 'rejected', reason}。

// [{ status: "fulfilled", value: "Hello World" }, { status: "rejected", reason: "fail" }]
const res = await Promise.allSettled(
[Promise.resolve('Hello World'), 
Promise.reject('fail')]);

如果要检查承诺是否有执行失败的,你可以使用 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);
}

三、如何排序日期数组

1、基础方法

日期数组排序比较简单,我们可以使用内置的排序方法就能轻松解决,示例代码如下:

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、按照对象的日期属性排序

同样,按照对象的日期属性排序也很简单,同样我们可以使用上述的内置 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、去除时间按日期排序

有时候,你只需要按照日期排序,需要忽略日期的时间部分,这时你需要借助 [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(0000) - new Date(date2).setHours(0000));

/*
[
  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;

结束

今天的分享就到这里,感谢大家的阅读。

内容参考:https://masteringjs.io/


浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报