美文网首页
字符串&&Math使用

字符串&&Math使用

作者: 礼知白 | 来源:发表于2018-08-18 20:58 被阅读0次

多行字符串的写法

  1. 如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。
var longString = "Long \
long \
long \
string";

longString
// "Long long long string"

加了反斜杠以后,原来写在一行的字符串,可以分成多行,效果与写在同一行完全一样。注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。

  1. 连接运算符(+)可以连接多个单行字符串,用来模拟多行字符串。
var longString = 'Long '
  + 'long '
  + 'long '
  + 'string';

反斜杠在字符串内有特殊含义,用来表示一些特殊字符,所以又称为转义符。
如果字符串的正常内容之中,需要包含反斜杠,则反斜杠前需要再加一个反斜杠,用来对自身转义。
var path = "C:\\games\\war3\\"

  1. ES6扩展
var str =  `
你好
这里是饥人谷
jirengu.com
开启你的前端之路
`

Math

写一个函数,生成一个随机 IP 地址,一个合法的 IP 地址为 0.0.0.0~255.255.255.255

function getRandIP(){
    var arr=[];
    for(var i=0; i<4; i++){
        arr.push(Math.floor(Math.random()*256))
    }
    return arr.join(".")
}
var ip = getRandIP()
console.log(ip)

写一个函数,生成一个随机颜色字符串,合法的颜色为#000000~ #ffffff。

//方法一
function getRandColor(){
  var color = '#';
  var dict = '0123456789abcdef';
  for (var i=0; i <6; i++){
    color += dict[parseInt(Math.random() *16)];
  }
  return color;
}
var color = getRandColor()
console.log(color)

//方法二
function getRandColor() {
    var randomStr = "#";
    for(var i = 0; i < 6; i++) {
        randomStr += (Math.floor(Math.random() * 16)).toString(16);
    }
    return randomStr;
}
var color = getRandColor()
console.log(color)

写一个函数,返回从min到max之间的 随机整数,包括min不包括max 。

function friendlyDate(time){
  var t = Date.now() - time;
  switch(true){
    case t >= 0 && t < 60*1000 :
      console.log('刚刚');
      break;
    
    case t >= 60*1000 && t < 3*60*1000 :
      console.log('3分钟前');
      break;
      
    case t >= 3*60*1000 && t < 24*60*60*1000 :
      console.log('8小时前');
      break;

    case t >= 24*60*60*1000 && t < 30*24*60*60*1000 :
      console.log('3天前 ');
      break;

    case t >= 30*24*60*60*1000 && t < 12*30*24*60*60*1000 :
      console.log('2个月前');
      break;

    case t >= 12*30*24*60*60*1000 :
      console.log('8年前');
      break;

    default :
      console.log('输入时间有误'); 
  }
}
var str = friendlyDate( '1534591087999' );
var str2 = friendlyDate('1534391087999');

实现一个reduce函数,作用和原生的reduce类似下面的例子。

EX:var sum = reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0); => 6

function newReduce(arr, iteratee, initValue){
  var tmpArr = (initValue === undefined ? [] : [initValue]).concat(arr);//判断是否有原始值
  while(tmpArr.length > 1){
    tmpArr.splice(0, 2, iteratee(tmpArr[0], tmpArr[1]));
  }
  return tmpArr[0];
}

 var sum = newReduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);
console.log(sum);

实现一个flatten函数,将一个嵌套多层的数组 array(数组) (嵌套可以是任何层数)转换为只有一层的数组,数组中元素仅基本类型的元素或数组,不存在循环引用的情况。

Ex:flatten([1, [2], [3, [[4]]]]) => [1, 2, 3, 4];

  • 方法一:concat
function flatten(arr) {
    var result = [];
    arr.forEach(function(value, index, array) {
        if(Array.isArray(value)) {
            result = result.concat(flatten(value));
        } else {
            result = result.concat(value);
        }
    });
    return result;
}
  • 方法二:闭包
function flatten(arr) {
    var result = [];
    function _flatten(arr) {
        arr.forEach(function(value, index, array){
            if(Array.isArray(value)) {
                _flatten(value);
            } else {
                result.push(value);
            }
        });
    }
    _flatten(arr);
    return result;
}
  • 方法三:reduce
function flatten(arr) {
    return arr.reduce(function(a, b){
        if(Array.isArray(b)) {
            return a.concat(flatten(b));
        } else {
            return a.concat(b);
        }
    },[]);
}
function newFlatten(arr){
    return arr.reduce(function(initArr, currentArr){
        return initArr.concat(Array.isArray(currentArr) ? newFlatten(currentArr) : [currentArr]);
    } ,[]);
}
var result = newFlatten([1, [2], [3, [[4]]]]);
console.log(result);//

写一个函数,操作数组,返回一个新数组,新数组中只包含正数。

function filterPositive(arr){
  var arr1 = []
  for(var i = 0;i < arr.length;i++){
    if(typeof arr[i] === 'number' && arr[i] > 0){
      arr1.push(arr[i])
    } 
  }
  return arr1
}
var arr = [3, -1,  2,  '饥人谷', true]
filterPositive(arr)
console.log(filterPositive(arr))

用 splice函数分别实现 push、pop、shift、unshift方法。

如:

function push(arr, value){
    arr.splice(arr.length, 0, value)
    return arr.length
}
var arr = [3, 4, 5]
arr.push(10) // arr 变成[3,4,5,10],返回4

改进版

function push(arr){
    for(var i=1; i<arguments.length;i++){
        arr.splice(arr.length, 0, arguments[i])
    }
    return arr.length
}

//下面的写法有兴趣的同学可自行了解 //http://es6.ruanyifeng.com/#docs/array

function push(arr, ...args){
    arr.splice(arr.length, 0, ...args)
    return arr.length
}
实现push方法
function newPush(arr){
    for(var i=1; i<arguments.length;i++){
        arr.splice(arr.length, 0, arguments[i])
    }
    return arr.length
}
var arr = [3, 4, 5]
console.log(arr.push(10));//4
console.log(arr);//[3, 4, 5, 10]
console.log(newPush(arr, 12));//5
console.log(arr);//[3, 4, 5, 10, 12]
实现pop方法
function newPop(arr){
  return arr.splice(arr.length-1, 1)[0]//需要返回数组的元素值,添加[0]
}
var arr = [3, 4, 5]
console.log(arr.pop());//5
console.log(arr);//[3, 4]
console.log(newPop(arr));//4
console.log(arr);//[3]
实现shift方法
function newShift(arr){
  return arr.splice(0, 1)[0];
}
var arr = [3, 4, 5]
arr.shift();//
console.log(arr);//[4, 5]
newShift(arr);//
console.log(arr);//[5]
实现unshift方法
function newUnshift(arr, value){
  arr.splice(0, 0, value);
  return arr.length;
}
var arr = [3, 4, 5]
console.log(arr.unshift(10));//4
console.log(arr);//[10, 3, 4, 5]
console.log(newUnshift(arr, 20));//5
console.log(arr);//[20, 10, 3, 4, 5]

对以下代码 users中的对象,分别以 name 字段、age 字段、company 字段进行排序

var users = [
  { name: "John", age: 20, company: "Baidu" },
  { name: "Pete", age: 18, company: "Alibaba" },
  { name: "Ann", age: 19, company: "Tecent" }
]
var sortByAge = users.sort(function(v1, v2){
  return v1.age > v2.age
})///以 age 字段排序
console.log(users)
var sortByName = users.sort(function(v1, v2){
  return v1.name > v2.name
})//以 name 字段排序
console.log(users)
var sortByCompany = users.sort(function(v1, v2){
  return v1.company > v2.company
})///以 company 字段排序
console.log(users)

相关文章

  • 字符串&&Math使用

    多行字符串的写法 如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠。 加了反斜杠以后,原来写在一行的字符串,...

  • 内置对象之Math

    Math对象只提供了静态对的属性和方法,所以使用时不用实例化,比如数组和字符串有实例化,可以直接用Math。 属性...

  • JavaScript-对象

    Number 字符串 数组 Date日期 Math

  • python内置函数

    math模块 在使用前导入math模块 import math 常用方法 math.pow()方法 math.p...

  • java8_杂项改进

    标签:java 杂项改进 字符串 无符号数及Math方法 比较器 文件使用 Base64编码 注解 NULL检查 ...

  • Python学习笔记(2014.10.02)

    math模块(数学函数): 使用math模块 import mathdir(math) 这句可查...

  • python 2.2 数据类型(math&优先级)

    使用 math 模块 math 模块是标准库中的,所以不用安装,可以直接使用 >>> import math di...

  • 判断输入是否为整数

    1、使用typeof和取余运算符%判断 2 、使用Math.round、Math.ceil、Math.floor判...

  • C#保留两位小数

    使用原始方法 使用Math.Round 使用string.Format 区别Math.Round 和 string...

  • 获取数组最大值

    将数组排序: Math.min() 和 Math.max() 字符串拼接: apply 传参: 假设当前数组中第一...

网友评论

      本文标题:字符串&&Math使用

      本文链接:https://www.haomeiwen.com/subject/ucvfiftx.html