JavaScript

ES6系列 (二)新的字符串方法

2019-10-11  本文已影响0人  Eastboat

方法

思考题

如何修改函数使得返回的时间永远是两个字符长度表示 03:03

//获取当前的小时数和分钟数
function getTime() {
  const date = new Date();
  return date.getHours() + ":" + date.getMinutes();
}
console.log(getTime()); // 上午3时03分会返回 字符串3:3

搜索字符串

所有这些方法都是区分大小的,执行搜索前要将字符串小写化

所有这些方法还可以指定第二个参数指定字符串中的起始搜索位置

startsWith()

下面我们来看两个案例

/*
1.来自不同厂家的产品数据,价格字段有的有美元符,没有的需要我们自己加上,
所以需要检查是否已存在$的字段
*/
const PRODUCT_ARR = [
  {
    id: 0001,
    name: "加多宝",
    price: "$1.00"
  },
  {
    id: 0002,
    name: "农夫山泉",
    price: "0.5"
  },
  {
    id: 0003,
    name: "脉动",
    price: "$0.80"
  },
  {
    id: 0004,
    name: "味全每日C",
    price: "1.3"
  }
];

for (let i of PRODUCT_ARR) {
  if (i.price[0] === "$") {
    //判断第一个字符有美元符
    console.log(i);
  } else {
    //没有的我们手动加上
  }
}

/*
    2。根据用户的当前电话判断所在区
 */
let userTel = "021-888-8880";
const AREA_CODE = "021";
if (userTel.substr(0, 3) === AREA_CODE) {
  console.log(`当前用户的号码是在此区域`);
}

现在有了 ES6 的startsWith(),我们可以改写如下:我们一眼就能看出他在做什么。

if (i.price.starstWith("$")) {
  //....
}

if (userTel.starstWith(AREA_CODE)) {
  //....
}

endsWith()、includes()

let name = "east-boat";
console.log(name.startsWith("east")); //true
console.log(name.endsWith("boat")); //true
console.log(name.includes("t-b")); //true
console.log(name.includes("-bo")); //true

填充字符串

要求某个函数接受用十进制(基数为 10)表示的 IP 地址,将其转化为二进制(基数为 2)表示

function binaryIP(decimalIPStr) {
  return decimalIPStr
    .split(".")
    .map(function(octet) {
      return Number(octet).toString(2);
    })
    .join(".");
}
console.log(binaryIP("192.168.2.1")); //11000000.10101000.10.1

但是当 ip 地址小于 128 的数时,二进制数小于 8 位数字,此时上面的函数是无法执行的

解决办法:需要用 0 填充每一个字节,知道每一个都是 8 位

String.prototype.repeat

'0'.repeat(8) // 调用8次 '00000000'
'0'.repeat(4.9) // 如果不是整数,向下取整而不是四舍五入 '0000'

// 添加es6特性解决
function binaryIP(decimalIPStr) {
  return decimalIPStr
    .split(".")
    .map(function(octet) {
      let bin = Number(octet).toString(2);
      return "0".repeat(8 - bin.length) + bin;
    })
    .join(".");
}
console.log(binaryIP("192.168.2.1")); //11000000.10101000.00000010.00000001

上一篇下一篇

猜你喜欢

热点阅读