Skip to content

字符串练习题

js
// 生成一个a-z的字符串
let str = ''
for (let i = 97; i <= 122; i++) {
    str += String.fromCharCode(i)
}
console.log(str)
js
// 将下面的字符串分割成一个单词数组,同时去掉数组中每一项的,和.
var str =
  'Lorem, ipsum dolor sit amet consectetur adipisicing elit. Adipisci impedit voluptatem cupiditate, est corporis, quis sunt quod tempore officiis hic voluptates eaque commodi. Repudiandae provident animi quia qui harum quasi.';

let result = str.split(" ");
for (let i = 0; i < result.length; i++) {
  result[i] = result[i].replaceAll(",", "").replaceAll(".", "");
}
console.log(result);
js
// 得到下面字符串中第一个i和最后一个i之间的子串

var str =
  'Lorem, ipsum dolor sit amet consectetur adipisicing elit. Adipisci impedit voluptatem cupiditate, est corporis, quis sunt quod tempore officiis hic voluptates eaque commodi. Repudiandae provident animi quia qui harum quasi.';

let firstI = str.indexOf("i");
let lastI = str.lastIndexOf("i");
let result = str.slice(firstI + 1, lastI);
console.log(result);
js
// 将下面的rgb格式转换成为HEX格式
var rgb = 'rgb(253, 183, 25)';

let parts = rgb.replaceAll('rgb', "").replaceAll("(", "").replaceAll(")", "").split(",");

let r = parseInt(parts[0]).toString(16);
let g = parseInt(parts[1]).toString(16);
let b = parseInt(parts[2]).toString(16);

let result = `#${r}${g}${b}`;
console.log(result);
js
// name转换成驼峰命名
var name = 'has own property'; // --> hasOwnProperty

let result = "";
let parts = name.split(" ");
for (let i = 0; i < parts.length; i++) {
    let s = parts[i];
    if (i > 0) {
        s = s[0].toUpperCase() + s.substring(1);
    }
    result += s;
}
console.log(result);

Math练习题

js
/**
 * 得到一个指定范围内的随机整数
 * @param {number} min 范围的最小值
 * @param {number} max 范围的最大值(无法取到最大值)
 * @return {number} 范围内的随机整数
 */
function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min) + min);
}
js
function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min) + min);
}

/**
 * 得到一个指定长度的随机字符串
 * 字符串包含:数字、字母
 * @param {number} length 字符串的长度
 * @return {number} 随机字符串
 */
function getRandomString(length) {
    var str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    let result = "";
    for (let i = 0; i < length; i++) {
        var index = getRandom(0, str.length);
        result += str[index];
    }
    return result

    // 方法二:巧办法
    // return Math.random().toString(36).substr(2, 2 + length);
}

let res = getRandomString(7);
console.log(res);
js
function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min) + min);
}

/**
 * 从一个数组中随机取出一项
 * @param {any[]} arr 数组
 * @return {any} 数组的随机一项
 */
function getRandomItem(arr) {
    return arr[getRandom(0, arr.length)];
}

var arr = [2, 3, "abc", "h", 6];
console.log(getRandomItem(arr));

日期练习题

js
/**
 * 将日期格式化为字符串
 * @param {Date} date 要格式化的日期对象
 * @param {string} format 格式化字符串 yyyy-年  MM-月  dd-日 HH-小时 mm-分钟 ss-秒 ms-毫秒
 * @return {string} 日期字符串
 */
function formatDate(date, format) {
  var year = date.getFullYear().toString().padStart(4, '0');
  var month = (date.getMonth() + 1).toString().padStart(2, '0');
  var day = date.getDate().toString().padStart(2, '0');

  var hour = date.getHours().toString().padStart(2, '0');
  var minute = date.getMinutes().toString().padStart(2, '0');
  var second = date.getSeconds().toString().padStart(2, '0');
  var millisecond = date.getMilliseconds();

  return format
    .replace('yyyy', year)
    .replace('MM', month)
    .replace('dd', day)
    .replace('HH', hour)
    .replace('mm', minute)
    .replace('ss', second)
    .replace('ms', millisecond);
}

var d = new Date();
console.log(formatDate(d, 'yyyy年MM月dd日 HH时mm分ss秒'));

/* 
方法巧妙在: 
 1. 使用了字符串的replace来进行传入参数的格式替换
 2. 使用padStart方法填充0
*/

数组练习题

js
/*将下面多个数组拼接成一个数组 */
var nums1 = [1, 2, 3];
var nums2 = [4, 5, 6];
var nums3 = [7, 8, 9];

var nums = nums1.concat(nums2, nums3);
console.log(nums);
js
/* 删除数组中的所有字符串 */
var nums = [1, 1, '1', 'a', 'b', 'a', 3, 5, 3, 7];

for (let i = 0; i < nums.length; i++) {
    if (typeof nums[i] === 'string') {
        nums.splice(i, 1);
        i--;
    }
}
console.log(nums);

/* 
这里i--的原因是因为,每一次删除一个元素后,数组的长度就会减少,对应的索引就会改变
所以,在删除某个元素之后,还应该回头看一眼当前位置的元素,是不是字符串
*/
js
/* 数组去重 */
var nums = [1, 1, '1', 'a', 'b', 'a', 3, 5, 3, 7];

for (let i = 0; i < nums.length; i++) {
    const item = nums[i];
    // 下表i之后有无等于i的元素,有就删除
    for (let j = i + 1; j < nums.length; j++) {
        if (item == nums[j]) {
            nums.splice(j, 1);
            j--;
        }
    }
}

console.log(nums);

/* 技巧:
当写双重for循环的时候,将外曾循环给忘记,将任务拆解为单个,这样就容易得多了。
外层循环:i=0时  元素是1  我们思考的只是,内层怎么找到后方有元素也是1的元素,删除即可
*/
js
// 判断下面的文件是否符合后缀名要求
// 合法的后缀名:.jpg  .gif  .bmp .webp  .png

var filename = 'd://files/mymap/3.jpg';

const index = filename.lastIndexOf('.');
const extname = filename.substring(index);

const validExts = ['.jpg', '.gif', '.bmp', '.webp', '.png'];

if (validExts.includes(extname)) {
    console.log('符合要求');
}
js
// 进一步完善下面的扑克牌程序
// 给牌堆添加一个shuffle方法,该方法可以打乱牌堆中扑克牌的顺序

/**
 * 创建一张扑克牌
 * @param {number} number 1-1, ..., 11-J,12-Q,13-K,14-小王,15-大王
 * @param {number} color 1-黑桃  2-红桃  3-梅花  4-方片
 */
function Poker(number, color) {
  this.number = number;
  this.color = color;
}

Poker.prototype.print = function () {
  if (this.number === 14) {
    console.log('joker');
    return;
  }
  if (this.number === 15) {
    console.log('JOKER');
    return;
  }
  // 其他情况
  // 得到花色
  var colors = ['♠', '♥', '♣', '♦'];
  var color = colors[this.color - 1];
  // 点数
  var numbers = [
    'A',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    '10',
    'J',
    'Q',
    'K',
  ];
  var number = numbers[this.number - 1];

  console.log(color + number);
};

/*
  一碟扑克牌
*/
function Deck() {
  this.pokers = [];
  for (var i = 1; i <= 13; i++) {
    for (var j = 1; j <= 4; j++) {
      this.pokers.push(new Poker(i, j));
    }
  }
  this.pokers.push(new Poker(14, 0));
  this.pokers.push(new Poker(15, 0));
}

Deck.prototype.print = function () {
  for (var i = 0; i < this.pokers.length; i++) {
    this.pokers[i].print();
  }
};

/**
 * 洗牌,打乱牌堆中的扑克牌顺序
 */
Deck.prototype.shuffle = function () {
  this.pokers.sort(function () {
    return Math.random() - 0.5;
  });
};


const deck = new Deck();
deck.shuffle();//打乱牌顺序
deck.print();

MIT License