前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「1分钟学JS基础」移除最后一个字符、Promise.allSettled()的使用、日期数组排序

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

作者头像
前端达人
发布2021-11-16 09:49:56
2.1K0
发布2021-11-16 09:49:56
举报
文章被收录于专栏:前端达人前端达人

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

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

1、常用方法

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

代码语言:javascript
复制
let str = 'Masteringjs.ioF';
str.slice(0, -1); // Masteringjs.io

2、其他方法

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

代码语言:javascript
复制
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$/, '') ,如下所示。

代码语言:javascript
复制
// 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}。

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

如果要检查承诺是否有执行失败的,你可以使用 Array#find() 方法。

代码语言:javascript
复制
res.find(({ status }) => status === 'rejected');

3、浏览器支持

allSettled() 在 IE 浏览器和 Node 12.9 以下的版本不支持,因此你可以使用 Promise.all() 模拟支持,示例代码如下:

代码语言:javascript
复制
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、基础方法

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

代码语言:javascript
复制
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() 方法,示例代码如下:

代码语言:javascript
复制
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) 方法,示例代码如下:

代码语言:javascript
复制
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;

结束

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、如何移除字符串最后一个字符
    • 1、常用方法
      • 2、其他方法
      • 二、如何理解 Promise.allSettled()
        • 1、基础介绍
          • 2、返回值
            • 3、浏览器支持
            • 三、如何排序日期数组
              • 1、基础方法
                • 2、按照对象的日期属性排序
                  • 3、去除时间按日期排序
                  • 结束
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档